【问题标题】:aes parameter to anchor start and end points for ggplot geom_smooth regression (loess)?用于锚定ggplot geom_smooth回归(黄土)的起点和终点的aes参数?
【发布时间】:2020-10-14 00:54:50
【问题描述】:

是否有一个参数可以锚定黄土 geom_smooth 回归的起点和终点?如果我增加跨度(这样回归不会太摇摆不定),起点和终点似乎有很大不同(我在图表上有多条线,使用 as.factor),而实际上它们不是(非常接近一起)。我无法共享我的数据,因为它是用于机密的学术研究,而且我不确定如何重现此示例......只是想知道这是否可以使用 ggplot。

这里有一些图片可以说明问题,不过...

低跨度 (span = 0.1),只是要绘制的 750 个点中的前 10 个 --> 这样您就可以看到真正的起点:

然后随着高跨度(span = 1.0),以及所有750个点,起始值和结束值完全不同。我不确定为什么会发生这种情况,但它非常具有误导性:

基本上,我想要第二张图片的平滑度,但是当我绘制所有数据(即所有 750 个点)时,第一张图片的具体和准确的起点。让我知道是否有任何方法可以做到这一点。感谢您的所有帮助。

【问题讨论】:

    标签: r ggplot2 regression loess


    【解决方案1】:

    在没有看到您的代码的情况下,我已经知道您正在使用 xlim(0,10)scale_x_continuous(limits=c(0,10)) 为“span = 1.0”版本设置轴限制 - 对吗?将其更改为以下内容:

    coord_cartesian(xlim = c(0, 10))
    

    这是因为xlim()(它只是scale_x_continuous(limits=...) 的包装器)不仅会放大您的数据,而且实际上在执行之前丢弃任何超出这些限制的数据任何计算。查看the documentation xlim()the documentation coord_cartesian() 了解更多信息。

    使用以下示例很容易看出这是如何工作的:

    # create dataset
    set.seed(8675309)
    df <- data.frame(x=1:1000, y=rnorm(1000))
    
    # basic plot
    p <- ggplot(df, aes(x,y)) + theme_bw() +
        geom_point(color='gray75', size=1) + geom_smooth()
    p
    

    我们得到一个基本图,正如我们所料,geom_smooth() 在该数据集上的结果是一条平行于 x 轴在 y=0 处的直线。

    如果我们使用xlim()scale_x_continuous(limits=...) 来查看前10 个点,您会看到geom_smooth() 行不一样:

    p + xlim(0,10)
    
    # or this one... results in the same plot
    p + scale_x_continuous(limits=c(0,10))
    

    结果线的标准差要高得多,并且略高于 y=0,因为前 10 个点恰好略高于其余 990 个点的平均值。如果您使用 coord_cartesian(xlim=...),则绘图的放大发生在 计算完成后,不会丢弃任何点,为您绘制相同的点,但 geom_smooth() 线与完整数据集:

    p + coord_cartesian(xlim=c(0,10))
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 2022-11-28
      • 2012-05-18
      • 1970-01-01
      相关资源
      最近更新 更多