使用qplot()函数对图进行平滑处理后,需要提取新的“平滑”数据。我无法从平滑的数据构建数据框架。
该图已平滑,但是通过构建数据框,我收到一条错误消息。
我用这个来平滑绘图
qq <- qplot(x4,y4, geom='smooth', span =0.5)
然后,我尝试使用此方法来构建数据框:
data.frame(qq)
我收到消息:
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) :
cannot coerce class ‘c("gg", "ggplot")’ to a data.frame
答案 0 :(得分:1)
ggplot::geom_smooth
使用不同的基础函数来计算平滑度,具体取决于数据集的大小或用户的规范。对于较小的数据集,它使用stats::loess
,因此您可以自己运行stats::loess
来获取该信息。
作为示例,下面是基于mtcars数据集的平滑ggplot:
library(tidyverse)
plot.data <- ggplot(data = mtcars, aes(x = mpg, y = wt)) +
geom_point() +
geom_smooth(span = 0.5)
print(plot.data)
我们可以通过直接使用loess
和predict
,然后将其打包到数据帧中来使自己平滑:
loess.data <- stats::loess(wt ~ mpg, data = mtcars, span = 0.5)
loess.predict <- predict(loess.data, se = T)
loess.df <- data.frame(fit = loess.predict$fit, se = loess.predict$se.fit, mpg = mtcars$mpg, wt = mtcars$wt)
> head(loess.df)
fit se mpg wt
Mazda RX4 2.851238 0.1746388 21.0 2.620
Mazda RX4 Wag 2.851238 0.1746388 21.0 2.875
Datsun 710 2.741055 0.1986979 22.8 2.320
Hornet 4 Drive 2.781686 0.1770399 21.4 3.215
Hornet Sportabout 3.454600 0.1967633 18.7 3.440
Valiant 3.592860 0.2072037 18.1 3.460
正如我们通过对其进行绘制所看到的,它与ggplot自己所做的相同。
plot.fit <- ggplot(data = loess.df, aes(x = mpg, y = fit)) +
geom_line() +
geom_ribbon(aes(ymin = fit - se, ymax = fit + se), alpha = 0.5)
print(plot.fit)
答案 1 :(得分:0)
使用stat_smooth
qq <- qplot(x4,y4, geom='smooth', span =0.5) + stat_smooth()