ggplot2 - 使用两种不同的色标来叠加图

时间:2013-02-21 20:18:00

标签: r ggplot2 color-scheme

我试图覆盖两个不同的情节。一个是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)

datdat2具有相同的架构,但值不同。

我找到了几个解决叠加图的例子,但似乎都没有解决这个特定的问题。

1 个答案:

答案 0 :(得分:12)

首先,制作两个样本数据框,其名称与示例相同。

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"))

enter image description here