在循环中为多个图形更改颜色

3
我想使用R菜谱中的函数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因子向量吗? 感谢您的帮助!


有很多方法,但其中一种是将您的颜色列加入到“scan”中,类似于ggplot(cbind(scan, col = as.factor(coors2[[i]])), aes(color = col, ...)) - Axeman
1个回答

2
您把颜色美学与颜色比例混淆了。设置 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, ]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接