簡體   English   中英

如何從R中的平滑圖中提取數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM