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 имеют одинаковую схему, но разные значения.

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


person Ricardo Saporta    schedule 21.02.2013    source источник


Ответы (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"))

введите описание изображения здесь

person Didzis Elferts    schedule 21.02.2013