J'ai une ligne horizontale dans un ggplot et je voudrais indiquer sa valeur (7.1) sur l'axe des y.
library(ggplot2)
df <- data.frame(y=c(1:10),x=c(1:10))
h <- 7.1
plot1 <- ggplot(df, aes(x=x,y=y)) + geom_point()
plot2 <- plot1+ geom_hline(aes(yintercept=h))
Merci de votre aide.
Il n'est pas clair si vous voulez que 7.1 fasse partie de l'axe des ordonnées ou si vous voulez simplement un moyen d'étiqueter la ligne. En supposant que ce soit le cas, vous pouvez utiliser scale_y_continuous()
pour définir vos propres ruptures. Quelque chose comme cela peut faire ce que vous voulez (vous aurez probablement besoin de jouer du violon):
plot1+ geom_hline(aes(yintercept=h)) +
scale_y_continuous(breaks = sort(c(seq(min(df$y), max(df$y), length.out=5), h)))
En supposant que ce soit le cas, c’est probablement plus ce que vous voulez:
plot1 + geom_hline(aes(yintercept=h)) +
geom_text(aes(0,h,label = h, vjust = -1))
Que diriez-vous quelque chose comme ça?
plot1 + geom_hline(aes(yintercept=h), colour="#BB0000", linetype="dashed") +
geom_text(aes( 0, h, label = h, vjust = -1), size = 3)
Similaire à solution de Chase avec une modification de l'utilisation des étiquettes existantes.
ggplot_build(plot1)$layout$panel_ranges[[1]]$y.major_source
peut être utilisé pour extraire les étiquettes existantes et en ajouter de nouvelles h
.
plot1 + geom_hline(aes(yintercept=h)) +
scale_y_continuous(breaks = sort(c(ggplot_build(plot1)$layout$panel_ranges[[1]]$y.major_source, h)))
Ceci fait suite à La réponse de Prradep .
Je pense que la réponse de Prradep fonctionne pour une ancienne version de ggplot2. J'utilise ggplot2 version 3.1.0 et pour extraire les étiquettes existantes de plot1
dans cette version, vous devez utiliser:
ggplot_build(plot1)$layout$panel_params[[1]]$y.major
Cela ne fonctionne que pour les AXES LINÉAIRES! Si vous avez un axe des ordonnées non linéaire (par exemple, logarithmique), alors ggplot2 enregistre les repères si l’axe était linéaire dans $y.major
. Les étiquettes de graduation réelles sont stockées en tant que vecteur de caractères dans $y.labels
. Par conséquent, pour un axe y non linéaire, vous devez utiliser:
as.numeric(ggplot_build(cl.plot.log)$layout$panel_params[[1]]$y.labels)