如何使用GGally::ggpairs中的loess方法,使用wrap函数

20

我试图复制Coursera R回归模型课程中提供的这个简单示例:

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

我希望看到一个6x6的配对图——瑞士数据中6个变量的每种组合都有一个带有loess平滑和置信区间的散点图。

但是,我遇到了以下错误:

Error in display_param_error() : 'params' 是一个被弃用的参数。请使用 'wrap' 函数来提供参数。help("wrap", package = "GGally")

我查看了 ggpairs()wrap() 的帮助文件,并尝试了许多不同顺序的 wrap()wrap_fn_with_param_arg() 函数。

我可以如下正常工作:

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

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

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

我尝试了上面的代码行后出现了这个错误。

Error in value[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')

您也可以提供符合函数(data, mapping, ...){ . . . } api的自定义函数,返回一个ggplot2绘图对象。例如: my_fn <- function(data, mapping, ...){ p <- ggplot(data = data, mapping = mapping) + geom_point(...) p } ggpairs(data, lower = list(continuous = my_fn))

提供的函数:loess

显然,我在错误的位置输入了loess。有人能帮我理解如何添加loess部分吗?

请注意,我的问题与这个问题不同,因为我正在问如何在ggpairs中实现loess,而params参数已过时。

非常感谢。

4个回答

33

一种快速的方法是编写自己的函数...下面的函数是从你问题中提供的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))

enter image description here

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

enter image description here


这可能会对传递给每个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"))))

如何按因素考虑颜色? - Ben
1
@Ben;如果您想按因子拆分每个图形,只需使用ggpairs功能,例如ggpairs(iris, aes(col=Species), lower = list(continuous = my_fn))。如果您想将其限制在特定的图形中,则需要扩展my_fn函数。以下是一些最近的问题和答案,这些应该会有所帮助:https://stackoverflow.com/questions/66246984/how-to-customize-graph-with-2nd-correlation-line-in-ggpairs/66248574#66248574,或者甚至可以按组拆分。https://dev59.com/F3ANtIcB2Jgan1zntkJu#71131736; - user20650

13

也许您正在学习Coursera在线课程回归模型,并尝试将课程提供的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" 可能更适合。


谢谢您的建议,但是当我尝试您的代码时,出现了错误:未知参数:方法。 - meenaparam
1
@meenaparam 在我的情况下,我没有任何错误。一些 R.version 输出:platform x86_64-pc-linux-gnuos linux-gnuversion.string R version 3.3.3 (2017-03-06) - Cryptor
1
现在这个对我起作用了,他们一定更新了 ggally,谢谢! - meenaparam
是否有可能为SE设置alpha值? - Adel
我已经运行了以下代码一段时间,没有任何问题。突然间出现了一个错误信息。我没有更新任何可能导致这个问题的软件包的最近更新。这是代码:`ggpairs(df, columns = c(2:5, 14), lower = list(continuous = wrap("smooth", method = "lm")),)`。错误信息如下:Error in wrap("smooth", method = "lm") : unused argument (method = "lm")。有人能够解释一下我在这里做错了什么吗? - Tathagato

2

我也猜测你正在上Coursera的课程。然而,我没有找到包含ggplot示例的github仓库。

这是我做的使它可行的方法:

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

感谢@Firefighter1017,但这会给出一个线性拟合(lm),而不是我想要的loess平滑器。请参见上面@scarain的答案以使您的代码正常工作。 - meenaparam

0

这个代码可行: ggpairs(swiss, lower = list(continuous = wrap("smooth", method = "loess")))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接