2017-02-14 995 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]))) 
} 
相關問題