Ошибка в scale_color_manual(): ! Непрерывные значения переданы дискретной шкале

Вопрос или проблема

Я изучаю R, используя книгу “Quantitative Social Science Data with R. An Introduction” Фогарти (2019), в которой предоставлены данные и код для воспроизведения примеров. Все работает хорошо, но я постоянно сталкиваюсь с ошибкой при использовании функции scale_color_manual:

setwd("")
simd <- read.csv("simd_small.csv")
names(simd)
simd <- subset(simd, !is.na(pct_depress))

p1 <- ggplot(data=simd) + 
  geom_point(mapping=aes(x=pct_employment_deprived, y=pct_depress,
                         color=urban), position="jitter")

p2 <- ggplot(data=simd) + 
  geom_point(mapping=aes(x=pct_employment_deprived, y=pct_depress,
                         color=urban), position="jitter") +
  scale_color_manual(values = c("blue", "red"))

p3 <- ggplot(data=simd) + 
  geom_point(mapping=aes(x=pct_employment_deprived, y=pct_depress,
                         shape=urban), position="jitter")

p4 <- ggplot(data=simd) + 
  geom_point(mapping=aes(x=pct_employment_deprived, y=pct_depress,
                         color=urban), position="jitter") +
  scale_color_grey()

library(gridExtra)
x11()
grid.arrange(p1, p2, p3, p4, ncol=2, nrow=2)

Проблема:

Error in `scale_color_manual()`:
! Continuous values supplied to discrete scale.
ℹ Example values: 0, 0, 0, 0, and 0
Run `rlang::last_trace()` to see where the error occurred.

Я проверил существующие обсуждения (например, “scale_color_manual не работает для назначения пользовательских цветов [duplicate]”), но они, похоже, не ответили на мой вопрос.

Ответ или решение

Ошибка, которую вы получаете при использовании функции scale_color_manual(), возникает из-за несоответствия между типами данных, которые вы используете для масштабирования цветов. В данном случае, функция scale_color_manual() ожидает дискретные (категориальные) данные, тогда как вы передаете ей непрерывные значения. Давайте разберем, как можно решить эту проблему и понять, откуда она исходит.

Контекст Проблемы

В коде, приводимом в вашем вопросе, функция ggplot() использует переменную urban для определения цветов точек на графике, используя scale_color_manual(). Ошибка с указанием, что "непрерывные значения переданы дискретной шкале", предполагает, что переменная urban закодирована как числовая, но для верного использования scale_color_manual(), она должна быть факторной или категориальной.

Пути Решения

  1. Проверка и преобразование типа данных urban:

    Убедитесь, что переменная urban в вашей таблице simd является факторной. Если это не так, преобразуйте её:

    simd$urban <- as.factor(simd$urban)

    Использование as.factor() преобразует числовую переменную в факторную, что позволяет scale_color_manual() правильно работать с указанными цветами.

  2. Корректный вызов scale_color_manual():

    После преобразования urban, перейти к настройке цветов будет возможно без ошибок:

    p2 <- ggplot(data=simd) + 
     geom_point(mapping=aes(x=pct_employment_deprived, y=pct_depress,
                            color=urban), position="jitter") +
     scale_color_manual(values = c("blue", "red"))

Дополнительные Рекомендации

  • Проверка данных: Всегда полезно посмотреть на данные перед их использованием, чтобы определить их типы и убедиться, что они правильно подготовлены для анализа:

    str(simd)
  • Проверка библиотеки: Убедитесь, что у вас загружена корректная версия пакета ggplot2. Ошибки могут возникать из-за несовместимости с более ранними или поздними версиями пакета.

Следуя этим рекомендациям, вы сможете устранить ошибку и правильно визуализировать ваши данные. Если в дальнейшем столкнетесь с схожими проблемами, стоит всегда проверять типы данных и их пригодность для функций, которыми вы собираетесь пользоваться.

Оцените материал
Добавить комментарий

Капча загружается...