Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R ggplot2: Labeling a horizontal line without associating the label with a series

Tags:

r

ggplot2

I'd like to label a horizontal line on a ggplot with multiple series, without associating the line with a series. R ggplot2: Labelling a horizontal line on the y axis with a numeric value asks about the single-series case, for which geom_text solves. However, geom_text associates the label with one of the series via color and legend.

Consider the same example from that question, with another color column:

library(ggplot2)
df <- data.frame(y=1:10, x=1:10, col=c("a", "b"))  # Added col
h <- 7.1
plot1 <- ggplot(df, aes(x=x, y=y, color=col)) + geom_point()
plot2 <- plot1 + geom_hline(aes(yintercept=h))
# Applying top answer https://stackoverflow.com/a/12876602/1840471
plot2 + geom_text(aes(0, h, label=h, vjust=-1))

Result

How can I label the line without associating the label to one of the series?

like image 960
Max Ghenis Avatar asked Oct 18 '25 08:10

Max Ghenis


2 Answers

Is this what you had in mind?

library(ggplot2)
df <- data.frame(y=1:10, x=1:10, col=c("a", "b"))  # Added col
h <- 7.1
ggplot(df, aes(x=x,y=y)) + 
  geom_point(aes(color=col)) +
  geom_hline(yintercept=h) +
  geom_text(data=data.frame(x=0,y=h), aes(x, y), label=h, vjust=-1)

First, you can make the color mapping local to the points layer. Second, you do not have to put all the aesthetics into calls to aes(...) - only those you want mapped to columns of the dataset. Three, you can have layer-specific datasets using data=... in the calls to a specific geom_*.

like image 90
jlhoward Avatar answered Oct 19 '25 22:10

jlhoward


You can use annotate instead:

plot2 + annotate(geom="text", label=h, x=1, y=h, vjust=-1)

Result

Edit: Removed drawback that x is required, since that's also true of geom_text.

like image 43
Max Ghenis Avatar answered Oct 19 '25 22:10

Max Ghenis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!