2013-06-17 9 views
45

このプロットの凡例を手動で設定する方法はわかりません。私が本当に欲しいのは、3つの色を使い、それぞれの隣に名前がある、簡単な伝説です。複雑なプロットのマニュアル凡例を作成する

enter image description here

現在のコードは次のようになります。

a <-c("S1","S2","S3","S4","S5","S6","S7","S8","S9") #names 
b <-c(0.23,0.26,0.55,0.56,0.36,0.23,0.18,0.06,0.04) #mean t0 
c <-c(0.64,0.6,0.81,1.4,0.89,0.55,0.48,0.22,0.09) #mean t1 
d <-c(0.20,0.23,0.52,0.53,0.33,0.20,0.15,0.04,0.03) #SD low t0 
e <-c(0.26,0.29,0.58,.59,0.39,0.26,0.21,0.08,0.05) #SD high t0 
f <-c(0.67,0.63,0.86,1.44,0.93,0.59,0.51,0.25,0.10) #SD high t1 
g <-c(0.61,0.57,0.78,1.36,0.85,0.53,0.45,0.19,0.08) #SD low t1 
h <-c(0.41,0.34,0.26,0.84,0.53,0.32,0.30,0.16,0.05) #absolute change 

data <- data.frame(a,b,c,d,e,f,g,h) 

ggplot(data=data,aes(a)) + 
    geom_bar(stat="identity", aes(y=h),fill="#62c76b",colour="#333333")+ #green 
    geom_line(aes(y=b,group=1),size=1.0,colour="#f04546") + #red 
    geom_point(aes(y=b),size=3, colour="#f04546") +   #red 
    geom_errorbar(aes(ymin=d, ymax=e), colour="#f04546", width=0.1, size=.8) + 
    geom_line(aes(y=c,group=1),size=1.0,colour="#3591d1") + #blue 
    geom_point(aes(y=c),size=3, colour="#3591d1") +   #blue 
    geom_errorbar(aes(ymin=f, ymax=g), colour="#3591d1", width=0.1, size=.8) + 
    ylab("Symptom severity") + xlab("PHQ-9 symptoms") + 
    ylim(0,1.6) + 
    theme_bw() + 
    theme(axis.title.x = element_text(size = 15, vjust=-.2)) + 
    theme(axis.title.y = element_text(size = 15, vjust=0.3)) 
+3

非常に役に立っ - 私がいない場合はドキュメントとチュートリアルからコードを持っているでしょうか? – Torvon

答えて

63

あなたは伝説を生成するために美学(AESステートメント内の色)に属性をマッピングする必要があります。

cols <- c("LINE1"="#f04546","LINE2"="#3591d1","BAR"="#62c76b") 
ggplot(data=data,aes(x=a)) + 
    geom_bar(stat="identity", aes(y=h, fill = "BAR"),colour="#333333")+ #green 
    geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red 
    geom_point(aes(y=b, colour="LINE1"),size=3) +   #red 
    geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) + 
    geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue 
    geom_point(aes(y=c,colour="LINE2"),size=3) +   #blue 
    geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) + 
    scale_colour_manual(name="Error Bars",values=cols) + scale_fill_manual(name="Bar",values=cols) + 
    ylab("Symptom severity") + xlab("PHQ-9 symptoms") + 
    ylim(0,1.6) + 
    theme_bw() + 
    theme(axis.title.x = element_text(size = 15, vjust=-.2)) + 
    theme(axis.title.y = element_text(size = 15, vjust=0.3)) 

enter image description here

私は、ローランドがどこから来ているを理解しますが、これは唯一の3つの属性があるため、合併症が、これはそれのようにワイドフォーマットでデータを残すのが妥当かもしれ重畳バーおよびエラーバーから発生しますです。それはわずかに複雑さを減らすことができるusing geom_pointrangeによって。


プロット仕様に+ theme(legend.key = element_rect(fill = "white",colour = "white"))を追加し、オリジナルでエラーバーの凡例の背景色を変更します。さまざまな凡例をマージするには、通常、すべての要素に対して一貫したマッピングを行う必要がありますが、現在、私にとって黒い背景のアーティファクトを生成しています。私はguide = guide_legend(fill = NULL,colour = NULL)が背景を凡例に対してnullに設定すると思ったが、そうはしなかった。おそらく別の質問の価値がある。

ggplot(data=data,aes(x=a)) + 
    geom_bar(stat="identity", aes(y=h,fill = "BAR", colour="BAR"))+ #green 
    geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red 
    geom_point(aes(y=b, colour="LINE1", fill="LINE1"),size=3) +   #red 
    geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) + 
    geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue 
    geom_point(aes(y=c,colour="LINE2", fill="LINE2"),size=3) +   #blue 
    geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) + 
    scale_colour_manual(name="Error Bars",values=cols, guide = guide_legend(fill = NULL,colour = NULL)) + 
    scale_fill_manual(name="Bar",values=cols, guide="none") + 
    ylab("Symptom severity") + xlab("PHQ-9 symptoms") + 
    ylim(0,1.6) + 
    theme_bw() + 
    theme(axis.title.x = element_text(size = 15, vjust=-.2)) + 
    theme(axis.title.y = element_text(size = 15, vjust=0.3)) 

enter image description here


伝説の黒の背景を取り除くために、あなたはguide_legendoverride.aes引数を使用する必要があります。この目的は、正しく割り当てられていない可能性のある凡例の特定の面を指定できるようにすることです。

ggplot(data=data,aes(x=a)) + 
    geom_bar(stat="identity", aes(y=h,fill = "BAR", colour="BAR"))+ #green 
    geom_line(aes(y=b,group=1, colour="LINE1"),size=1.0) + #red 
    geom_point(aes(y=b, colour="LINE1", fill="LINE1"),size=3) +   #red 
    geom_errorbar(aes(ymin=d, ymax=e, colour="LINE1"), width=0.1, size=.8) + 
    geom_line(aes(y=c,group=1,colour="LINE2"),size=1.0) + #blue 
    geom_point(aes(y=c,colour="LINE2", fill="LINE2"),size=3) +   #blue 
    geom_errorbar(aes(ymin=f, ymax=g,colour="LINE2"), width=0.1, size=.8) + 
    scale_colour_manual(name="Error Bars",values=cols, 
         guide = guide_legend(override.aes=aes(fill=NA))) + 
    scale_fill_manual(name="Bar",values=cols, guide="none") + 
    ylab("Symptom severity") + xlab("PHQ-9 symptoms") + 
    ylim(0,1.6) + 
    theme_bw() + 
    theme(axis.title.x = element_text(size = 15, vjust=-.2)) + 
    theme(axis.title.y = element_text(size = 15, vjust=0.3)) 

enter image description here

+0

アンディ、ありがとう。 (1)2行と1バーの凡例をマージする方法はありますか? (2)凡例を手動で変更する方法はありますか?例えば。 LINE1とLINE2の周りの灰色の境界の色?私はggplot2のドキュメント(私のコードはどこから来たのか)で何も見つかりませんでした。 – Torvon

+0

@ Torvonは、凡例をマージするために、通常、それぞれのgeomに一貫したマッピングを持たせる必要があります。私は例を挙げて更新しますが、これは奇妙なアーティファクトを生成します(おそらく、ラインには内部の塗りつぶしがないためです)。それがあなたの好みに合わせて修正できるかどうかを見る別の質問の価値があるかもしれません。異なる伝説は素晴らしいアイデアだとは思わないが、私は言うだろう。それは2つの伝説IMOでかなり簡単です。 –

関連する問題