0

根据 GGally R 包中 ggpairs() 函数的文档,可以将自定义函数指定为“lower”/“upper”参数的输入。对于连续离散变量组合,我想简单地在分类变量的类别中显示连续变量的均值(最好使用点,而不是条形),如果可能的话,使用颜色美学进一步由另一个分类变量分层。

我在以下线程中找到了一些信息:

https://github.com/ggobi/ggally/issues/218

然而,我对 ggpairs(和 ggplot2)的了解太肤浅,无法从线程中的模板生成这样的自定义函数(此外,变量名称“Species”似乎被硬编码到模板中,我更愿意如果可能的话,自定义函数中没有任何硬编码信息)。

如果有人可以帮助我提供模板或解决方案草图,我将非常感激,例如使用以下示例(其中“custom_function”需要替换为上述功能):

dat <- reshape::tips
pm <- ggpairs(dat,
              mapping = aes(color = sex, alpha = 0.3),
              columns = c("total_bill", "smoker", "time", "tip"),
              showStrips = T,
              lower = list(combo = custom_function))
print(pm)
4

1 回答 1

2

根据@aosmith 的评论,我制作了一个自定义函数,它似乎对我的目的来说工作得很好,到目前为止还没有对它进行广泛的测试,但无论如何它可能还是有帮助的:

library(GGally)
library(ggplot2)
library(ggstance)

gmean_point <- function(data, mapping, ...) {

  x <- eval(mapping$x, data)
  y <- eval(mapping$y, data)

  if(is.numeric(y)) {
    p <- ggplot(data) +
      geom_blank(mapping) +
      stat_summary(mapping,
                   geom = 'point', fun.y = mean,
                   position = position_dodge(width = 0.2))
  } else {
    p <- ggplot(data) +
      geom_blank(mapping) +
      stat_summaryh(mapping,
                    geom = 'point', fun.x = mean,
                    position = position_dodgev(height = 0.2))
  }

  p

}

pm <- ggpairs(reshape::tips,
              mapping = aes(color = sex, alpha = 0.3),
              columns = c("total_bill", "smoker", "time", "tip"),
              showStrips = T,
              lower = list(combo = gmean_point),
              upper = list(combo = 'box'))
print(pm)

由上面的代码产生的情节

于 2017-09-02T14:23:52.393 回答