在R中绘制平滑的图形

3

我想在R中绘制一张平滑的图表(带有阴影边缘),其中X轴和Y轴包含“年龄”和“围度”变量,使用Orange数据即可。

ggplot2使用哪种平滑方法?

我尝试了以下代码,但出现了错误:

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

错误和警告:在模型框架中出现错误,公式为:y ~ x。变量 'y' 的类型无效(列表)。调用:loess -> eval -> eval -> -> model.frame.default 执行终止。


1
由于我们没有您的橙色数据,因此无法运行您的代码。 - G5W
你很可能会遇到错误,因为 xy 变量是一列数据框,但你想将它们作为向量传递给 loess。所以尝试使用 x<-Orange[[2]]; y<-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) - user20650
2个回答

3

来自?geom_smooth: “对于[默认]情况下,平滑方法是根据最大群体的大小(跨所有面板)选择的。如果观察值少于1,000,则使用'loess()';否则将使用'mgcv :: gam()'”

因此,对于Orange,您始终会得到loess,但是您可以通过设置方法来明确指定。

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

1
您可以使用geom_smooth()函数。示例如下。
library(ggplot2)
ggplot(diamonds,aes(x=carat,y=price)) + 
  geom_point(aes(color=cut))+
  geom_smooth()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接