Вопрос или проблема
Я изучаю 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()
, она должна быть факторной или категориальной.
Пути Решения
-
Проверка и преобразование типа данных
urban
:Убедитесь, что переменная
urban
в вашей таблицеsimd
является факторной. Если это не так, преобразуйте её:simd$urban <- as.factor(simd$urban)
Использование
as.factor()
преобразует числовую переменную в факторную, что позволяетscale_color_manual()
правильно работать с указанными цветами. -
Корректный вызов
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. Ошибки могут возникать из-за несовместимости с более ранними или поздними версиями пакета.
Следуя этим рекомендациям, вы сможете устранить ошибку и правильно визуализировать ваши данные. Если в дальнейшем столкнетесь с схожими проблемами, стоит всегда проверять типы данных и их пригодность для функций, которыми вы собираетесь пользоваться.