ggplot2 - использование двух разных цветовых шкал для наложенных графиков
Я пытаюсь наложить два разных сюжета. Один geom_boxplot
, другой geom_jitter
, Мне бы хотелось, чтобы у каждого была своя цветовая гамма. Но когда я добавляю вторую цветовую шкалу, мне выдается ошибка
"Scale for 'fill' is already present. Adding another scale for 'fill',
which will replace the existing scale."
Я предполагаю, что я делаю что-то не так. Любой совет будет признателен
Это грубый пример моего рабочего кода:
P <- ggplot(dat) +
geom_boxplot(aes(x=ve, y=metValue, fill=metric), alpha=.35, w=0.6, notch=FALSE, na.rm = TRUE) +
scale_fill_manual(values=cpalette1) +
geom_hline(yintercept=0, colour="#DD4466", linetype = "longdash") +
theme(legend.position="none")
P + geom_jitter(dat2, aes(x=ve, y=metValue, fill=atd),
size=2, shape=4, alpha = 0.4,
position = position_jitter(width = .03, height=0.03), na.rm = TRUE) +
scale_fill_manual(values=cpalette2)
dat
а также dat2
имеют одинаковую схему, но разные значения.
Я нашел несколько примеров, относящихся к наложенным графикам, но ни один из них, казалось бы, не отвечал этой конкретной проблеме.
1 ответ
Сначала сделали два примера фрейма данных с такими же именами, как в примере.
dat<-data.frame(ve=rep(c("FF","GG"),times=50),
metValue=rnorm(100),metric=rep(c("A","B","D","C"),each=25),
atd=rep(c("HH","GG"),times=50))
dat2<-data.frame(ve=rep(c("FF","GG"),times=50),
metValue=rnorm(100),metric=rep(c("A","B","D","C"),each=25),
atd=rep(c("HH","GG"),times=50))
Я предполагаю, что вам не нужно использовать аргумент fill=
в geom_jitter()
потому что цвет для shape=4
может быть установлен также с colour=
аргумент. Тогда вы можете использовать scale_colour_manual()
установить ваши значения. Вместо cpallete
просто использовали названия цветов.
P <- ggplot(dat) +
geom_boxplot(aes(x=ve, y=metValue, fill=metric), alpha=.35, w=0.6, notch=FALSE, na.rm = TRUE) +
geom_hline(yintercept=0, colour="#DD4466", linetype = "longdash") +
scale_fill_manual(values=c("red","blue","green","yellow"))+
theme(legend.position="none")
P + geom_jitter(data=dat2, aes(x=ve, y=metValue, colour=atd),
size=2, shape=4, alpha = 0.4,
position = position_jitter(width = .03, height=0.03), na.rm = TRUE) +
scale_colour_manual(values=c("red","blue"))