Я хочу сравнить количество цветов разного цвета (красных и зеленых) на двух разных сайтах. У меня есть boxplot в ggplot2 с графиком джиттера на заднем плане. Я хочу, чтобы цвет точек дрожания был разным в зависимости от цвета цветов. Не уверен, как это сделать! Есть ли способ покрасить мои грани в зависимости от цвета цветка?
Некоторые примерные данные:
site <- c(rep(1, 4), rep(2, 4))
colour <- c("red", "green", "red", "green", "red", "green", "red", "green")
number <- c(12, 24, 22, 14, 12, 16, 18, 17)
df <- data.frame(site, colour, number)
df$site <- as.factor(df$site)
ggplot(df, aes(site, number))+
facet_wrap("colour")+
geom_jitter(alpha = 0.3) +
geom_boxplot(alpha = 0, colour = "black")+
theme(legend.position = "none")
Сопоставьте цвет с именем столбца. Если вы хотите, чтобы цвет интерпретировался буквально, используйте шкалу идентичности:
ggplot(df, aes(site, number))+
facet_wrap(colour)+
geom_jitter(aes(colour = colour), alpha = 0.3) +
geom_boxplot(alpha = 0, colour = "black") +
scale_color_identity() +
theme(legend.position = "none")
Хотя оба ответа здесь решают вашу проблему, я думаю, что они излишне запутаны.
ggplot(df, aes(site, number)) +
facet_wrap(~colour) +
geom_jitter(alpha = 0.3, color = colour) +
geom_boxplot(alpha = 0, color = "black")
Created on 2019-05-30 by the reprex package (v0.3.0)
Вам не нужно theme(legend.position = "none")
, так как внутри вашего geoms
у вас нет никаких аргументов внутри aes()
.
В одном из ответов, хотя мы устанавливаем позицию легенды в none
(там она нужна, так как colour
находится внутри aesthetics
), у нас также есть show.legend = F
, что избыточно.
Ваши столбцы colour
уже c("red", "green")
, поэтому нам не нужно использовать scale_color
.