添加图层而不影响音阶训练

Bri*_*ggs 6 r ggplot2

有没有办法在 ggplot 中添加图层而不影响尺度的训练,或者至少不影响尺度的限制?

我正在处理的用例是我想要包含参考线,但仅当数据自然包含该线时才需要它。如果其余数据不需要它,我不希望扩展比例以包含该行。

举个例子

library("ggplot2")

g <- ggplot(data = mtcars, aes(x=mpg, y=hp)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

添加 250 马力的参考线。

g + geom_hline(yintercept = 250)
Run Code Online (Sandbox Code Playgroud)

ggplot(数据 = mtcars, aes(x=mpg, y=hp)) + geom_point() + geom_hline(yintercept = 250)

如果我将数据更改为不沿 y 轴延伸那么远的数据,则 y 轴将扩展以包含水平线。

(g + geom_hline(yintercept = 250)) %+% mtcars[mtcars$cyl < 8,] 
Run Code Online (Sandbox Code Playgroud)

ggplot(数据 = mtcars[mtcars$cyl < 8,], aes(x=mpg, y=hp)) + geom_point() + geom_hline(yintercept = 250)

我想要的是在图层中指定geom_hline在确定 y 比例限制时不应使用的某种方法。适用于任何几何/图层的东西将是最好的。结果应该看起来像

g %+% mtcars[mtcars$cyl < 8,]
Run Code Online (Sandbox Code Playgroud)

先前情节所需的外观

我知道我可以手动设置 y 轴限制。但这并不能解决我的一般问题,因为我不知道如果没有附加的水平线层,轴的限制会是多少。

我认为这应该是可能的。在文档的示例layer_spatial中,它提到annotation_spatial“层不训练尺度,因此数据保持中心”,但我没有找到概括这一点的方法。

我已经看到了问题ggplot2:添加几何图形而不影响限制,这是相同的一般问题,但由于缩放了层内的值,所以答案特定于添加的层。

All*_*ron 3

您可以annotation_custom用 a (不会训练音阶)代替geom_hline。在你的情况下,它将是:

g <- g + annotation_custom(
      grid::linesGrob(y = unit(c(0, 0), "npc")), ymin = 250, ymax = 250)
Run Code Online (Sandbox Code Playgroud)

所以现在:

g
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

g %+% mtcars[mtcars$cyl < 8,]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述