[英]How to extract data from a smoothed plot in R?
在使用 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
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)
可能是更直接的解決方案可以使用stat_smooth
qq <- qplot(x4,y4, geom='smooth', span =0.5) + stat_smooth()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.