webentwicklung-frage-antwort-db.com.de

R ggplot2: Beschriften einer horizontalen Linie auf der Y-Achse mit einem numerischen Wert

Ich habe eine horizontale Linie in einem ggplot und möchte den Wert (7.1) auf der y-Achse beschriften.

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))

Danke für deine Hilfe.

24
adam.888

Es ist nicht klar, ob Sie möchten, dass 7.1 Teil der Y-Achse ist, oder ob Sie nur eine Möglichkeit zum Beschriften der Linie wünschen. Angenommen, die ersteren können Sie mit scale_y_continuous() Ihre eigenen Pausen definieren. So etwas kann das tun, was Sie wollen (am wahrscheinlichsten wird ein wenig gezögert):

plot1+ geom_hline(aes(yintercept=h)) + 
  scale_y_continuous(breaks = sort(c(seq(min(df$y), max(df$y), length.out=5), h)))

enter image description here

Letzteres vorausgesetzt, ist dies wahrscheinlich mehr, was Sie wollen:

plot1 + geom_hline(aes(yintercept=h)) +
  geom_text(aes(0,h,label = h, vjust = -1))

enter image description here

42
Chase

Wie wäre es mit so etwas?

plot1 + geom_hline(aes(yintercept=h), colour="#BB0000", linetype="dashed") + 
 geom_text(aes( 0, h, label = h, vjust = -1), size = 3)
6
Maiasaura

Ähnlich wie Chases Lösung mit einer Änderung der Verwendung der vorhandenen Labels.


ggplot_build(plot1)$layout$panel_ranges[[1]]$y.major_source kann verwendet werden, um die vorhandenen Labels zu extrahieren und neue hinzuzufügen h.

plot1 + geom_hline(aes(yintercept=h)) + 
  scale_y_continuous(breaks = sort(c(ggplot_build(plot1)$layout$panel_ranges[[1]]$y.major_source, h)))

 enter image description here

5
Prradep

Dies ist eine Folgemaßnahme zu der Antwort von Prradep .

Ich denke, die Antwort von Prradep funktioniert für eine ältere Version von ggplot2. Ich verwende ggplot2 Version 3.1.0 und um die vorhandenen Labels von plot1 in dieser Version zu extrahieren, müssen Sie Folgendes verwenden:

ggplot_build(plot1)$layout$panel_params[[1]]$y.major

Dies funktioniert nur bei LINEAR AXES! Wenn Sie eine nichtlineare Y-Achse haben (zum Beispiel logarithmisch), speichert ggplot2, wo Markierungen stehen würden, wenn die Achse in $y.major linear wäre. Die tatsächlichen Häkchenmarkierungen werden als Zeichenvektor in $y.labels gespeichert. Daher müssen Sie für eine nichtlineare Y-Achse Folgendes verwenden:

as.numeric(ggplot_build(cl.plot.log)$layout$panel_params[[1]]$y.labels)
1
GMSL