如何从R中的平滑图提​​取数据?

时间:2019-07-20 19:49:16

标签: r ggplot2

使用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

2 个答案:

答案 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)

enter image description here

我们可以通过直接使用loesspredict,然后将其打包到数据帧中来使自己平滑:

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)

enter image description here

答案 1 :(得分:0)

使用stat_smooth

可能是更直接的解决方案
qq <- qplot(x4,y4, geom='smooth', span =0.5) + stat_smooth()
相关问题