2017-02-14 992 views
0

我想要做的是循环使用不同样本的数据集并使用ggplot2制作重叠密度图。 1个参考样本与其他样本一起绘制在每个图中。 绘图本身是没有问题的,但颜色是:为ggplot2中的变量定义图例颜色

数据集:

df <- data.frame(SampleName = c("a","a","a","b","b","b","c","c","c"), 
     Data = c(1,1,2,4,6,7,3,4,9)) 

随着scale_fill_manual我可以一个颜色分配给特定的样品:

#1 

ggplot() + 
    geom_density(data=subset(df, SampleName == "a"), 
       aes(x = Data, group=SampleName, fill=SampleName), alpha= 0.6) + 
    geom_density(data=subset(df, SampleName == "b"), 
       aes(x = Data, group=SampleName, fill=SampleName), alpha= 0.6) + 
    scale_fill_manual(values = c("b" = "red", "a" = "green")) 

与含有所有的矢量样本名称我可以制作一个循环,用“b”作为固定样本绘制所有叠加图:

#2 

Samples <- c("a","b","c") 

for(i in 1:length(Samples)){ 
print(ggplot() + 
      geom_density(data=subset(df, SampleName == Samples[i]), 
         aes(x = Data, group=SampleName, fill=SampleName), alpha= 0.6) + 
      geom_density(data=subset(df, SampleName == "b"), 
         aes(x = Data, group=SampleName, fill=SampleName), alpha= 0.6) + 
      scale_fill_manual(values = c("red", "green")) 
) 
} 

#2中的问题是样品在b固定时改变颜色 - >在第一个图中,b是绿色,a是红色,图3中的b是红色,c是绿色。 当我尝试将#1中的颜色分配给特定样本(请参阅#3)时,将显示以下错误消息:

“错误:意外'='于: ”aes(x = Data,group =我试过不同的事情,使'样本[样本名称,填充=样本名称),alpha = 0.6))+ scale_fill_manual(values = c(“b”=“red”,Samples [i] =“

'我] = “绿色””更多 '的文本,如' 与as.character,粘贴(),...但是这似乎并没有工作。 任何解决方案?

#3 

for(i in 1:length(Samples)){ 
    print(ggplot() + 
     geom_density(data=subset(df, SampleName == Samples[i]), 
        aes(x = Data, group=SampleName, fill=SampleName), alpha= 0.6) + 
     geom_density(data=subset(df, SampleName == "b"), 
        aes(x = Data, group=SampleName, fill=SampleName), alpha= 0.6)) + 
     scale_fill_manual(values = c("b" = "red", Samples[i] = "green")) 
} 
+0

的伎俩! Thx很多,一直在寻找年龄来完成这项工作,并且让它看起来很容易=) – User1234567

回答

0

您可以使用setNames轻松创建指定的矢量,您可以在其中使用需要评估的表达式。例如:

setNames(c('red', 'green'), c('b', Samples[i])) 

这使得:

for(i in 1:length(Samples)){ 
    print(ggplot() + 
     geom_density(data=subset(df, SampleName == Samples[i]), 
        aes(x = Data, group=SampleName, fill=SampleName), alpha= 0.6) + 
     geom_density(data=subset(df, SampleName == "b"), 
        aes(x = Data, group=SampleName, fill=SampleName), alpha= 0.6)) + 
     scale_fill_manual(values = setNames(c('red', 'green'), c('b', Samples[i]))) 
} 
相关问题