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

ada*_*888 28 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))
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

Cha*_*ase 51

目前尚不清楚您是否希望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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

plot1 + geom_hline(aes(yintercept=h)) +
  geom_text(aes(0,h,label = h, vjust = -1))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 是否可以将标签显示在y轴上,但显示在图的右侧? (2认同)
  • 如何更改该特定轴标签的字体颜色,在本例中为“7.1”? (2认同)

Prr*_*dep 7

与Chase的解决方案类似,更改使用现有标签.


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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Mai*_*ura 6

这样的事怎么样?

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


GMS*_*MSL 5

这是普拉德普回答的后续内容。

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

ggplot_build(plot1)$layout$panel_params[[1]]$y.major
Run Code Online (Sandbox Code Playgroud)

这仅适用于线性轴!如果您有一个非线性 y 轴(例如对数轴),那么 ggplot2 会存储该轴在 中呈线性时刻度线所在的位置$y.major。实际的刻度线标签作为字符向量存储在 中$y.labels。因此,对于非线性 y 轴,您需要使用:

as.numeric(ggplot_build(cl.plot.log)$layout$panel_params[[1]]$y.labels)
Run Code Online (Sandbox Code Playgroud)