2017-06-22 2 views
1

J'essaie d'ajouter une légende à un graphique de densité généré via ggplot2, mais au lieu d'ajouter des étiquettes d'échantillons, j'essaie de remplir la légende avec des nombres.Ajouter une légende personnalisée des valeurs moyennes/mode au graphique de densité 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() 

Cela fait un graphique comme celui-ci: enter image description here

Y at-il un moyen d'ajouter une légende (intégrée dans le coin supérieur droit) qui contient les valeurs moyennes et le mode je l'ai déjà calculer?

Répondre

0

Vous pouvez ajouter du texte à l'aide ggplotannotate:

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) 

Mise à jour:

Si vous voulez utiliser pour différentes parcelles puis regardez ci-dessous;

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

Merci Masound. Cela fonctionne comme il est, mais ce serait bien s'il y avait une solution qui pourrait: 1) mettre à l'échelle pour différentes tailles de tracés (l'axe y ne sera pas toujours au maximum de trois) et 2) dessiner automatiquement la boîte de légende. Je suppose que l'annotation peut aussi dessiner des formes, mais le même problème existe ici lorsque les tailles de tracés sont différentes. – Michael

+0

Lisez ceci [discussion] (https://stackoverflow.com/questions/7705345/how-can-i-extract-plot-axes-ranges-for-a-ggplot2-object). Vous pouvez obtenir les y et x lim à partir de ggplot et ensuite définir les x et y dans annotate pour eux. – Masoud