Reputation: 7043
I used vjust
as workaround and elaborate an
acceptable distance by try and error. But this is sometimes very time consuming and changes
with the font size and the axis scale.
Is there a better method to align the text in the example automatic?
library(ggplot2)
ggplot(data=mtcars, aes(x=hp, y=mpg))+
geom_point()+
theme_bw() +
geom_vline(xintercept=200, colour="grey") +
geom_text(aes(x=200, label="the strong cars", y=20), colour="blue", angle=90, vjust = 1.2, text=element_text(size=11))+
geom_text(aes(x=200, label="the weak cars", y=20), colour="red", angle=90, vjust = -1, text=element_text(size=11))
ggsave(filename="geomline.png", width=5.5, height=2*3, dpi=300)
Upvotes: 46
Views: 83119
Reputation: 41603
Another option could be using the geom_textvline
function from the great geomtextpath package. This can actually combine the functions geom_text
and geom_vline
. This package has some create function to create curved, straight automatic text annotations. Check this link for some extra examples. Here is a reproducible example:
library(ggplot2)
library(geomtextpath)
# Using geom_textvline
ggplot(data=mtcars, aes(x=hp, y=mpg)) +
geom_point() +
geom_textvline(label = "the strong cars", xintercept = 200, vjust = 1.3) +
geom_textvline(label="the weak cars", xintercept = 200, vjust = -0.7) +
theme_bw()
# Using geom_textabline with slope
ggplot(data=mtcars, aes(x=hp, y=mpg)) +
geom_point() +
geom_textabline(slope = 0.05, label = "the strong cars", intercept = 10, vjust = 1.3) +
geom_textabline(slope = 0.05, label="the weak cars", intercept = 10, vjust = -0.7) +
theme_bw()
Created on 2022-08-25 with reprex v2.0.2
Upvotes: 4
Reputation: 1878
Another solution for the case of one line labels would be to add a line break before/after and keep the default vjust=0.5.
ggplot(data=mtcars, aes(x=hp, y=mpg)) +
geom_point() +
theme_bw() +
geom_vline(xintercept=200, colour="grey") +
geom_text(aes(x=200, label="\nthe strong cars", y=20), colour="blue", angle=90, text=element_text(size=11)) +
geom_text(aes(x=200, label="the weak cars\n", y=20), colour="red", angle=90, text=element_text(size=11))
Upvotes: 50