【问题标题】:Add layer without it affecting training of scales添加图层而不影响音阶的训练
【发布时间】:2020-09-05 00:53:34
【问题描述】:

有没有办法在不影响尺度训练或至少不影响尺度限制的情况下向 ggplot 添加图层?

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

建立一个例子

library("ggplot2")

g <- ggplot(data = mtcars, aes(x=mpg, y=hp)) + geom_point()

在 250 马力时添加参考线。

g + geom_hline(yintercept = 250)

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

(g + geom_hline(yintercept = 250)) %+% mtcars[mtcars$cyl < 8,] 

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

g %+% mtcars[mtcars$cyl < 8,]

我知道我可以手动设置 y 轴范围。但这并不能解决我的一般问题,因为我不知道如果没有额外的水平线层,轴限制会是什么。

我认为应该可以。在examples in the documentation for layer_spatial 中,它提到annotation_spatial“层不训练尺度,所以数据保持中心”,但我没有看到一种概括的方法。

我看到了ggplot2: Adding a geom without affecting limits 的问题,这是同一个一般问题,但是由于缩放层内的值,所以答案是特定于添加的层的。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

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

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

    那么现在:

    g
    

    但是

    g %+% mtcars[mtcars$cyl < 8,]
    

    【讨论】:

    • 我希望有一个更通用的解决方案可以与任何geomstat 一起使用,但这似乎是不可能的。该解决方案适用于我需要的水平线,并且可以推广到任何需要绘制的内容足够简单以直接指定 grobs 的地方。
    • @BrianDiggs 我知道这并不理想。不过,在它周围编写一个包装器来覆盖常见用例是很简单的。我想如果已经将其写入 ggplot 会很好。
    猜你喜欢
    • 2017-10-08
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    相关资源
    最近更新 更多