如何将Geil-Sen方法与geom_smooth一起使用

时间:2018-01-19 21:33:50

标签: r ggplot2

我正在尝试在ggplot的geom_smooth中实现一个theil-sen运算符。在一个理想的世界中,它会读到:geom_smooth(..., methods= "mblm")。我似乎无法找到答案,也无法弄清楚如何为此自定义方法。任何建议,指针或代码帮助将不胜感激。

我想有效地将​​“mblm”替换为geom_smooth中的方法选项:

library(tidyverse)
library(mblm)


# Option 1 - adding 'mblm' into the methods directly
ggplot(mtcars, aes(qsec, wt))+   
geom_point() +     
geom_smooth(method='mblm')

# Option 2 - defining the Theil-Sen function outside
ts_fit <- mblm(qsec ~ wt, data = mtcars)
ggplot(mtcars, aes(qsec, wt))+   
geom_point() +     
geom_smooth( alpha=0,method=ts_fit)

两者都不起作用。我生成警告Warning message: Computation failed in stat_smooth(): unused argument (weights = weight),这是geom_smooth行中的一个错误。任何帮助将不胜感激。

提前致谢, 内特

1 个答案:

答案 0 :(得分:1)

我明白了。这是完成的答案。

# Option 2 - defining the Theil-Sen function outside
ts_fit <- mblm(qsec ~ wt, data = mtcars)

ggplot(mtcars, aes(qsec, wt))+   
geom_point() +     
  geom_abline(intercept = coef(ts_fit)[1], slope = coef(ts_fit)[2])

更新: 找出了一种更可重复的方法来实现这一目标。

sen <- function(..., weights = NULL) {
  mblm::mblm(...)
}

mtcars %>% 
  ggplot(aes(qsec, wt)) +   
  geom_point() +     
  geom_smooth(method = sen)