更改循环中多个绘图的颜色

时间:2016-10-27 15:06:59

标签: r ggplot2

我想使用R cookbook函数multiplot来生成带有几个图的图片,这些图通过颜色方案可以显示表中的值(离散)。为了做到这一点,我想在循环中列出ggplot对象。我将颜色设置为color=as.factor(unlist(colors2[i,]))[sort.cd34],但这会导致所有绘图中的颜色编码相同,显然是因为每次都使用相同的colors2行,而不是依赖于i环。

nr.plot <- 9
colors2 <- Table1[1:nr.plot,11:38]
snp.plot <- list()
for (i in 1:nr.plot){
  p1 <- ggplot(scan,aes(x=c(1:28),y=cd34,color=as.factor(unlist(colors2[i,]))[sort.cd34])) +geom_point() + scale_color_manual(breaks=c("0","1","2"),values=c("yellow","orange","red")) 
  snp.plot[[i]] <- p1
}

如何避免这种情况,并为每个绘图对象从colors2获取不同的因子列表?我不知道它是否相关,但是 p1$mapping给出输出:

* x      -> c(1:28)
* y      -> cd34
* colour -> as.factor(unlist(colors2[i, ]))[sort.cd34]

变量colour不应该包含来自colors2的因子向量,以便整个事情发挥作用吗? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您将颜色美学与颜色比例混淆。设置aes(color = some.factor)只会告诉ggplot颜色应该随着some.factor的级别而变化。仅此一项不会设置使用的颜色,ggplot将在循环的每次迭代中使用相同的默认值。要更改用于不同级别的实际颜色,您需要在scale_color_manual()中设置它们。现在,你正在设置:

scale_color_manual(breaks=c("0","1","2"),values=c("yellow","orange","red")) 

在循环的每次迭代中,所以当然所有颜色都是相同的。

在您的示例中,以下内容可能有效:

scale_color_manual(values = unlist(colors2[i, ]))