38

我在 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

4 回答 4

71

目前尚不清楚您是否希望 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)))

在此处输入图像描述

假设后者,这可能是你想要的更多:

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

在此处输入图像描述

于 2012-10-13T20:14:52.867 回答
8

与 Chase 的解决方案类似,只是更改了使用现有标签。


ggplot_build(plot1)$layout$panel_ranges[[1]]$y.major_source可用于提取现有标签并添加新标签h

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

在此处输入图像描述

于 2017-10-20T14:47:34.497 回答
7

这样的事情怎么样?

plot1 + geom_hline(aes(yintercept=h), colour="#BB0000", linetype="dashed") + 
 geom_text(aes( 0, h, label = h, vjust = -1), size = 3)
于 2012-10-13T20:11:08.043 回答
4

这是Prradep 的回答的后续。

我认为 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)
于 2018-11-01T10:59:17.783 回答