Ошибка ggplot2: дискретное значение, подаваемое в непрерывную шкалу
У меня есть набор данных, называемый "объединенным", который содержит 3 числовых столбца "pauseMedian" и "numTotalPauses" и "diff". У меня также есть набор данных splineHull, который также содержит числовые столбцы "pauseMedian" и "numTotalPauses", плюс 6-уровневый фактор "microstyle"
У меня есть следующий код, который отлично работает. Он отображает разброс plop, а затем накладывает его на полигоны splineHull, окрашенные в соответствии с "микростилем".
script 1:
ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses))
+ geom_point()
+ geom_polygon(data = splineHull,
mapping=aes(x=pauseMedian,
y=numTotalPauses,
group=microstyle,
color = microstyle),
alpha=0)
Затем я также хочу изменить цвет точек в диаграмме рассеяния, добавив только один атрибут color = diff.
script 2:
ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses, color = diff))
+ geom_point()
+ geom_polygon(data = splineHull,
mapping=aes(x=pauseMedian,
y=numTotalPauses,
group=microstyle,
color = microstyle),
alpha=0)
Я вижу следующую ошибку:
Error: Discrete value supplied to continuous scale
Я не знаю, почему я вижу эту ошибку. Если мне по-прежнему нужен цветной график рассеяния, но нет полигонов, я запускаю следующий код, который он работает снова.
script 3:
ggplot(data=merged,aes(x = pauseMedian, y = numTotalPauses, color = diff))
+ geom_point()
Итак, что случилось с script 2, где это ошибка, и как я могу заставить ее работать?
Ответы
Ответ 1
Очевидно, что у вас не может быть другой цветовой эстетики для двух разных геометрий. В качестве обходного пути используйте вместо этого вместоэксплуатацию для очков. Это означает, что вы должны использовать стиль маркера точки, который имеет заполненный интерьер (см. ?pch
и прокрутка вниз для доступных стилей точек). Вот как это сделать:
ggplot() +
geom_point(data=merged,aes(x = pauseMedian, y = numTotalPauses, fill = diff),
pch=21, size=5, colour=NA) +
geom_polygon(data = splineHull,
mapping=aes(x=pauseMedian,
y=numTotalPauses,
colour = microstyle),
alpha=0)
Добавление colour=NA
(вне aes()
), избавляется от черной границы по умолчанию вокруг маркеров точки. Если вам нужна цветная рамка вокруг точек, просто измените colour=NA
на любой цвет, который вы предпочитаете.
Также см. этот поток из группы ggplot2
Google, обсуждая аналогичную проблему и некоторые обходные пути.
Ответ 2
Теперь, когда мы знаем, что два цветовых вара имеют разные типы, есть проблема. Вы можете попробовать использовать другой масштаб для одного (например, заполнить вместо цвета)
set.seed(123)
my_df1 <- data.frame(a=rnorm(100), b=runif(100), c=rep(1:10, 10))
my_df2 <- data.frame(a=rnorm(100), b=runif(100), c=factor(rep(LETTERS[1:5], 20)))
# this won't work. can't assign discrete and continuous to same scale
ggplot() +
geom_point(data=my_df1, aes(x=a, y=b, color=c)) +
geom_polygon(data=my_df2, aes(x=a, y=b, color=c), alpha=0.5)
Error: Discrete value supplied to continuous scale
# but use fill for polygons, and that works:
ggplot() +
geom_point(data=my_df1, aes(x=a, y=b, color=c)) +
geom_polygon(data=my_df2, aes(x=a, y=b, fill=c), alpha=0.5)
![plot output]()
Если вам нужно использовать тот же масштаб (цвет) и не можете преобразовать переменные в один и тот же тип, см. это для получения дополнительной информации: Построение непрерывных и дискретных серий в ggplot с фасеткой
Ответ 3
Просто добавьте что-то в предпочтительный ответ eipi10 выше (спасибо за это!!).
Опция color = "NA", чтобы избавиться от границы вокруг формы круга (pch = 21), должна быть между "". Если вы используете color = NA (без кавычек), вся форма исчезает и не отображается.
Я бы просто прокомментировал ответ, но у меня до сих пор нет репутации для этого.