2017-02-23 4 views
1

私のプロットで凡例の色を設定することに問題があります。凡例に適切な色を設定することができず、3つとも赤色で表示されます。Multiple Scatter ggplot私はscale_colour_manualオプションとscale_fill_manualを使ってみましたが動作しません。 gerenarlのデータフレームとコードが適切かどうかはわかりませんが、同じプロット上に異なる回帰直線を置くための唯一の方法でした。ここ はMWEです:ggplotラベルを使用する際の問題

`library("ggplot2") 
ConcCurve<-c(0.000,5.809,11.514,21.995,32.349,44.390,53.552) 
ABSHei<-c(0.01299076, 0.44779044, 0.87251242, 1.64435113, 2.41385198, 3.25395864,3.93389333) 
ABSAr3<-c(0.0224455, 0.8303167, 1.6170380, 3.0466451, 4.4496162, 5.9631238, 7.1746112) 
ABSAr5<-c(0.03847996, 1.44915907, 2.81864550, 5.29479463, 7.69466231, 10.27269797, 12.32472597) 
DataR<-data.frame(ConcCurve,ABSHei,ABSAr3,ABSAr5) 
p1<-ggplot(DataR) + 
    geom_point(aes(x=ConcCurve,y=ABSHei,fill="Height"),colour="blue") + 
    geom_smooth(aes(ConcCurve,ABSHei), method="lm", se=T,level = 0.9999,lwd=0.6, col ="blue") + 
    geom_point(aes(x=ConcCurve,y=ABSAr3,fill = "Area 3 pix"),colour="green") + 
    geom_smooth(aes(ConcCurve,ABSAr3), method="lm", se=T,level = 0.9999,lwd=0.6, col ="green") + 
    geom_point(aes(x=ConcCurve,y=ABSAr5,fill = "Area5 pix"),colour="red")+ 
    geom_smooth(aes(ConcCurve,ABSAr5), method="lm", se=T,level = 0.9999,lwd=0.6, col ="red") + 
    labs(x = expression(paste(plain("Hg"^plain("2+"))," Concentration (",mu,"g ",plain("kg"^plain("-1")),")")), y = "Integrated absorbance")+ 
    ggtitle("Calibration curves obtained using R")+ 
    guides(fill = guide_legend(reverse=F,title="Evaluation\nmode"))+ 
    scale_colour_manual(labels=c("Heigth", "Area 3 pix", "Area 5 pix"), 
         breaks=c("Heigth", "Area 3 pix", "Area 5 pix"), 
         values=c("blue","green","red")) 
print(p1) 
` 

彼らは説明した方法で表示されるので、どのように色を設定することができますか?ここで

+0

彼らがそれらをご希望の結果が得られていない固定として、問題の唯一の原因であるように思えませんが、いくつかのタイプミスは、あなたのコード(例えば「Heigth」)であるようです。 – wwl

+0

私はまた、これらのような質問で与えられた解決策を試してみて、うまくいかなかった:http://stackoverflow.com/questions/19330257/changing-the-color-in-the-legend-with-ggplot2-in-r – wwl

答えて

2

ggplot構文は、長いデータ形式に適している - あなたは、データフレームの形を変えるならば、それは問題を解決し、コードを簡単にする必要があります。このように:

library("ggplot2") 
ConcCurve<-c(0.000,5.809,11.514,21.995,32.349,44.390,53.552) 
ABSHei<-c(0.01299076, 0.44779044, 0.87251242, 1.64435113, 2.41385198, 3.25395864,3.93389333) 
ABSAr3<-c(0.0224455, 0.8303167, 1.6170380, 3.0466451, 4.4496162, 5.9631238, 7.1746112) 
ABSAr5<-c(0.03847996, 1.44915907, 2.81864550, 5.29479463, 7.69466231, 10.27269797, 12.32472597) 
DataR<-data.frame(ConcCurve, ABS=c(ABSAr5,ABSAr3,ABSHei), 
     mode=rep(c("Area 3 pix", "Area 5 pix", "Height"), each=7)) 

ggplot(DataR, aes(x=ConcCurve, y=ABS, color=mode)) + geom_point() + 
    geom_smooth(method="lm", level=0.9999, lwd=0.6) + 
    labs(x = expression(paste(plain("Hg"^plain("2+"))," Concentration (",mu,"g ",plain("kg"^plain("-1")),")")), 
     y = "Integrated absorbance") + 
    ggtitle("Calibration curves obtained using R") + 
    guides(guide_legend(title="Evaluation\nmode")) 

すべての美学はメインのggplot呼び出しに移動されました。次に、pointsmoothの両方は、同じグループと色(つまり、mode列)を2回書き込まずに使用します。組み込みカラースケールを使用しているので、各グループに明示的に尺度または色を指定する必要はありません。
また、データフレームを作成するときにABSタイプを並べ替えることにも注意してください。

enter image description here

+0

これは非常に洗練された解決策ですが、私はデータフレームの改革も試みましたが、その時点ではうまくいきませんでした。ありがとう – CristhianParedes

1

はあなたが本当に私はそれらを処分した塗りつぶしを使用していなかった解決策

ggplot(DataR) + 
    geom_point(aes(x=ConcCurve,y=ABSHei, color="blue")) + 
    geom_smooth(aes(ConcCurve,ABSHei), color="blue", method="lm", se=T,level = 0.9999,lwd=0.6) + 
    geom_point(aes(x=ConcCurve,y=ABSAr3, color="green")) + 
    geom_smooth(aes(ConcCurve,ABSAr3), color ="green", method="lm", se=T,level = 0.9999,lwd=0.6) + 
    geom_point(aes(x=ConcCurve,y=ABSAr5, colour="red"))+ 
    geom_smooth(aes(ConcCurve,ABSAr5), color ="red", method="lm", se=T,level = 0.9999,lwd=0.6) + 
    labs(x = expression(paste(plain("Hg"^plain("2+"))," Concentration (",mu,"g ",plain("kg"^plain("-1")),")")), y = "Integrated absorbance")+ 
    ggtitle("Calibration curves obtained using R")+ 
    guides(color = guide_legend(reverse=F,title="Evaluation\nmode"))+ 
    scale_colour_identity(labels=c("Height", "Area 3 pix", "Area 5 pix"), 
         breaks=c("blue", "green", "red"), guide="legend") 

注意です。私はaes()に色を移して伝説を得ました。次に、scale_color_identityを使用して、リテラルカラー値を使用し、labels=パラメータを使用して凡例で名前を変更しました。

enter image description here

+0

ありがとう、これはstackoverflowの私の最初の経験であり、適切な答えは私の問題を解決し、私はggplot2について少し学び、これが私を引き起こしていたストレスを、さらに非常に速い方法で取り除くことになった。もう一度ありがとうございます:D – CristhianParedes

+0

@juodからの回答は、より良い長期的な解決策です。あなたのデータがきちんとしたフォーマットであれば、ggplotははるかに使いやすくなります。可能であれば、このような複数のレイヤーの追加は避けるべきです。 – MrFlick

関連する問題