停止多个ggplot共享相同的scale_colour_manual?

时间:2017-02-16 02:50:37

标签: r ggplot2

我有多个ggplots存储在列表中。但是,它们可能有我想要使用的不同颜色。下面的第1节和第2节显示了这个例子。每个人都可以完美地生成图表。但是如果我将两者结合起来,因为第二个比第一个(3)具有更少的色标(1),则在之后打印第一个时会返回错误。(错误:手动刻度中的值不足.3需要但是只提供了1个。)不确定这是否是因为早期版本的ggplot(2.1.0)。欣赏解决此类问题的任何想法。

data1<-mtcars;
data1$cyl<-as.factor(data1$cyl);
#section 1 #
plotlist[[1]]<-ggplot(data1[],aes_string(x='hp',y='wt',group=paste('paste0(','gear',',','cyl',')'),fill=('cyl')))+
  geom_bar(stat='identity',position="dodge",size=1);
colourCount <- 3;
getPalette <- colorRampPalette(c(brewer.pal(11, "Spectral")[c(1:3,8:11)]));

plotlist[[1]]<-plotlist[[1]]+scale_colour_manual(values = rep(getPalette(min(colourCount,25)),times=floor(colourCount/25)+1))+
  scale_fill_manual(values = rep(getPalette(min(colourCount,25)),times=floor(colourCount/25)+1));#adjust color

#section 2 #
plotlist[[2]]<-ggplot(data1[data1$cyl==4,],aes_string(x='hp',y='wt',group=paste('paste0(','gear',',','cyl',')'),fill=('cyl')))+
  geom_bar(stat='identity',position="dodge",size=1);

colourCount <- 1;
getPalette <- colorRampPalette(c(brewer.pal(11, "Spectral")[c(1:3,8:11)]));
plotlist[[2]]<-plotlist[[2]]+scale_colour_manual(values = rep(getPalette(min(colourCount,25)),times=floor(colourCount/25)+1))+
  scale_fill_manual(values = rep(getPalette(min(colourCount,25)),times=floor(colourCount/25)+1));

1 个答案:

答案 0 :(得分:0)

对于这两个图表,您使用colourCount的相同变量。所以当你调用第一个情节时,在影响1到colourCount之后,值的数量是错误的(1而不是3)

如果您改为

colourCount <- list()
colourCount[[1]] <- 3;
...
colourCount[[2]] <- 1;

并在其工作的每个图中使用相应的变量名。