2017-02-14 13 views
0

私がしたいのは、異なるサンプルのデータセットをループし、ggplot2でオーバーレイ密度プロットを作成することです。 1つの参照サンプルは、他のサンプルの1つと一緒に各図にプロットされています。 自体プロットは問題ではなく、色は次のとおりggplot2で変数の凡例の色を定義する

データセットすべてを含むベクターで

#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")) 

:scale_fill_manualと

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)) 

iは、特定のサンプルに色を割り当てることができサンプル名私は固定サンプルとして "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は赤、プロット3bは赤、cは緑です。 私は(#3を参照)、特定のサンプルに#1のように色を割り当てるしようとすると、このエラーメッセージが表示されます。

「エラー:予期しない 『=』で: 」AES(X =データ、グループ=

「サンプル」で変数を作成しようとしましたが、このサンプルでは、​​[サンプル]、[サンプル名]、[塗りつぶし=サンプル名]、アルファ= 0.6)) (値= c( "b" = "赤" 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]))) 
} 
関連する問題