2017-06-22 16 views
1

ggplot2で生成された密度プロットに凡例を追加しようとしていますが、サンプルラベルを追加するのではなく、凡例に数値を入力しようとしています。平均値/モード値のカスタム凡例をggplot密度プロットに追加します

library(ggplot2) 
library(modeest) 

set.seed(9) 
d1=as.data.frame(rnorm(1000,mean=0.33,sd=0.138)) 
names(d1)=c("value") 
mean_d1=mean(d1$value)     #Mean=0.33081 
mode_d1=mlv(d1$value,method="shorth")[1] #Mode=0.35191 

gg=ggplot(d1,aes(value)) 
gg + 
geom_density() 

これは、このようなグラフになり: enter image description here

は、私はすでに計算している平均値とモード値が含まれている(右上隅に埋め込まれた)凡例を追加する方法はありますか?

答えて

0

あなたはannotateを使用してggplotにテキストを追加することができます

p + annotate("text", x = 0.6, y = 3, label = paste ("Mean ==", mean_d1), parse = TRUE) + 
    annotate("text", x = 0.6, y = 2.8, label = paste ("Mode ==", mode_d1), parse = TRUE) 

アップデート:

あなたが別のプロットのためにこれを使用したい場合は、下記をご覧;

max_y <- ggplot_build(gg)$layout$panel_ranges[[1]]$y.range[2] 
max_x <- ggplot_build(gg)$layout$panel_ranges[[1]]$x.range[2] 

gg + 
    annotate("text", x = max_x * 0.85, y = max_y * 0.95, label = paste 
        ("Mean ==", round(mean_d1, digits=3)), parse = TRUE) + 
    annotate("text", x = max_x * 0.85, y = max_y * 0.9, label = paste 
        ("Mode ==", round(as.numeric(mode_d1), digits=3)), parse = TRUE) 
+0

ありがとうございます。これはそのまま動作しますが、1)さまざまなサイズのプロット(y軸は常に最大3になるわけではありません)と2)凡例ボックスを自動的に描くことができるソリューションがあればいいでしょう。私は注釈も同様に形を描くことができると思うが、プロットサイズが異なるときに同じ問題が存在する。 – Michael

+0

この[スレッド](https://stackoverflow.com/questions/7705345/how-can-i-extract-plot-axes-ranges-for-a-ggplot2-object)を読んでください。あなたはggplotからyとx limを取得し、xとyを注釈でそれらに設定することができます。 – Masoud

関連する問題