R ggplot2:使用数值标记y轴上的水平线

时间:2012-10-13 20:02:26

标签: r ggplot2

我在ggplot中有一条水平线,我想在y轴上标记它的值(7.1)。

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

感谢您的帮助。

4 个答案:

答案 0 :(得分:44)

目前尚不清楚是否希望7.1成为y轴的一部分,或者只是想要一种标记线的方法。假设前者,您可以使用scale_y_continuous()来定义自己的休息时间。像这样的东西可能会做你想要的(最需要一些摆弄):

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

假设后者,这可能更符合您的要求:

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

enter image description here

答案 1 :(得分:6)

这样的事情怎么样?

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

答案 2 :(得分:6)

与Chase的solution类似,但更改了现有标签。

ggplot_build(plot1)$layout$panel_ranges[[1]]$y.major_source可用于提取exisitng标签并添加新标签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

答案 3 :(得分:2)

这是Prradep's answer的后续行动。

我认为Prradep的答案适用于ggplot2的旧版本。我正在使用ggplot2版本3.1.0,并且要提取该版本中plot1的现有标签,您必须使用:

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

这仅适用于线性轴!如果您具有非线性y轴(例如对数),则ggplot2将存储$y.major中轴为线性的刻度线。实际的刻度标记标签作为字符向量存储在$y.labels中。因此,对于非线性y轴,您需要使用:

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