【问题标题】:Plot a smooth graph in R在 R 中绘制平滑图
【发布时间】:2018-08-19 17:02:28
【问题描述】:

在 R 中,我想绘制一个平滑图(带有阴影边距),其中包含 X 和 Y 轴上的“年龄”和“周长”变量,用于准备橙色数据

ggplot2 使用的平滑“方法”是什么?

我喜欢这样,但会出错:

x <- Orange[2]
y <- Orange[3]
lo <- loess(y~x)
plot(x,y)
lines(predict(lo), col='red', lwd=2)

错误,警告:model.frame.default(formula = y ~ x) 中的错误: 变量 'y' 调用的无效类型(列表):loess -> eval -> eval -> -> model.frame.default 执行停止

【问题讨论】:

  • 由于我们没有您的 Orange 数据,我们无法运行您的代码。
  • 您很可能会收到该错误,因为 xy 变量是单列数据帧,但您希望将它们作为向量传递给 loess。所以尝试使用x &lt;- Orange[[2]] ; y &lt;- Orange[[3]](注意双方括号)。此外,loess 有一个 data 参数,因此您可以在公式中使用变量(第 2 列和第 3 列)的名称,并添加 data=Orange。所以对于你的例子,lo = loess(circumference ~ age, data=Orange) ; lines(lo$x[order(lo$x)], predict(lo)[order(lo$x)], col='red', lwd=2)

标签: r ggplot2 smoothing


【解决方案1】:

来自 ?geom_smooth: “对于 [默认],平滑方法是根据最大组的大小(在所有面板中)选择的。'loess()' 用于少于 1,000 次观察;否则使用 'mgcv::gam()'”

所以对于 Orange 无论如何你都会得到 loess,但你可以通过设置方法来明确。

ggplot(Orange,aes(x=age,y=circumference))+geom_point()+geom_smooth(method="loess")

【讨论】:

    【解决方案2】:

    您可以使用 geom_smooth()。示例如下。

    library(ggplot2)
    ggplot(diamonds,aes(x=carat,y=price)) + 
      geom_point(aes(color=cut))+
      geom_smooth()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2020-08-10
      • 2017-06-01
      相关资源
      最近更新 更多