19

我正在尝试复制 Coursera R 回归模型课程中给出的这个简单示例:

require(datasets)
data(swiss)
require(GGally)
require(ggplot2)
ggpairs(swiss, lower = list(continuous = "smooth", params = c(method = "loess")))

我希望看到一个 6x6 对图 - 一个散点图,对于瑞士数据中 6 个变量的每种组合,黄土更平滑,置信区间。

但是,我收到以下错误:

display_param_error() 中的错误:'params' 是一个已弃用的参数。请“包装”该函数以提供参数。帮助(“包装”,包=“GGally”)

我查看了ggpairs()and帮助文件,并尝试了and函数wrap()的许多排列。wrap()wrap_fn_with_param_arg()

我可以让它按预期工作:

ggpairs(swiss, lower = list(continuous = wrap("smooth")))

但是一旦我添加了黄土部分,它就不会:

ggpairs(swiss, lower = list(continuous = wrap("smooth"), method = wrap("loess")))

当我尝试上面的行时出现此错误。

值错误[3L]:以下 ggpair 绘图函数很容易获得:连续:c('points', 'smooth', 'density', 'cor', 'blank') 组合:c('box', 'dot ', 'facethist', 'facetdensity', 'denstrip', 'blank') 离散:c('ratio', 'facetbar', 'blank') na: c('na', 'blank')

诊断连续:c('densityDiag', 'barDiag', 'blankDiag') 诊断离散:c('barDiag', 'blankDiag') 诊断 na: c('naDiag', 'blankDiag')

您还可以提供自己的函数,遵循 function(data, mapping, ...){ 的 api。. . } 并返回一个 ggplot2 绘图对象 例如:my_fn <- function(data, mapping, ...){ p <- ggplot(data = data, mapping = mapping) + geom_point(...) p } ggpairs(data, lower = 列表(连续 = my_fn))

提供功能:黄土

显然我在错误的地方进入了黄土。谁能帮我理解如何添加黄土部分?

请注意,我的问题与这个不同,因为我在询问如何在 ggpairs 中实现 loess,因为 params 参数已被弃用。

非常感谢。

4

3 回答 3

28

一种快速的方法是编写自己的函数...下面的函数是根据ggpairs您问题中的错误消息提供的函数编辑的

library(GGally)
library(ggplot2)    
data(swiss)

# Function to return points and geom_smooth
# allow for the method to be changed
my_fn <- function(data, mapping, method="loess", ...){
      p <- ggplot(data = data, mapping = mapping) + 
      geom_point() + 
      geom_smooth(method=method, ...)
      p
    }

# Default loess curve    
ggpairs(swiss[1:4], lower = list(continuous = my_fn))

在此处输入图像描述

# Use wrap to add further arguments; change method to lm
ggpairs(swiss[1:4], lower = list(continuous = wrap(my_fn, method="lm")))

在此处输入图像描述


这也许可以更好地控制传递给每个参数的参数geon_

  my_fn <- function(data, mapping, pts=list(), smt=list(), ...){
              ggplot(data = data, mapping = mapping, ...) + 
                         do.call(geom_point, pts) +
                         do.call(geom_smooth, smt) 
                 }

# Plot 
ggpairs(swiss[1:4], 
        lower = list(continuous = 
                       wrap(my_fn,
                            pts=list(size=2, colour="red"), 
                            smt=list(method="lm", se=F, size=5, colour="blue"))))
于 2016-01-29T15:59:03.707 回答
13

也许你正在学习 Coursera 在线课程 Regression Models 并尝试将课程给出的 Rmarkdown 文件转换为 html 文件,并像我一样遇到这个错误。

我尝试的方法是:

require(datasets); data(swiss); require(GGally); require(ggplot2)
g = ggpairs(swiss, lower = list(continuous = wrap("smooth", method = "lm")))
g

您也可以尝试使用method="loess",但结果看起来与讲座中给出的有点不同。method = "lm"如我所见,可能更合适。

于 2016-08-12T08:42:32.830 回答
2

我也怀疑你在上 Coursera 的课。不过,我找不到任何包含 ggplot 示例的 github 存储库。

这是我为使其工作所做的工作:

gp = ggpairs(swiss, lower = list(continuous = "smooth"))
gp
于 2017-06-18T15:20:22.093 回答