【问题标题】:R ggplot2: Labelling a horizontal line on the y axis with a numeric valueR ggplot2:用数值标记y轴上的水平线
【发布时间】:2012-10-13 20:02:26
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 刚刚问了一个有关以编程方式标记多个 ablines here 的相关问题,如果将来有人碰巧正在寻找它(就像我发现这个时一样)。

标签: r ggplot2


【解决方案1】:

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

【讨论】:

  • 非常感谢 scale_y_continuous 解决方案。
  • 如果您的线条是条形图上的叠加层,并且具有因子 x 值,您会怎么做。
  • 是否可以让标签显示在 y 轴上但显示在绘图的右侧?
  • 如何更改特定轴标签的字体颜色,在本例中为“7.1”?
【解决方案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)

【讨论】:

    【解决方案3】:

    类似于 Chase 的 solution,只是使用了现有的标签。


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

    【讨论】:

      【解决方案4】:

      这样的事情怎么样?

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

      【讨论】:

      • 除非您下定决心要在轴本身上标记它。您可以增加刻度线的间距,以便在 7.1 有一个刻度线,但这会使您的绘图太忙。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      相关资源
      最近更新 更多