在 ggplot2 中创建散点图矩阵(pairs() 等效)

Posted

技术标签:

【中文标题】在 ggplot2 中创建散点图矩阵(pairs() 等效)【英文标题】:Create a matrix of scatterplots (pairs() equivalent) in ggplot2 【发布时间】:2011-04-13 17:06:06 【问题描述】:

是否可以用ggplot2 绘制散点图矩阵,使用ggplot 的不错的功能,例如将其他因素映射到颜色、形状等并添加更平滑?

我正在考虑类似于base 函数pairs 的东西。

【问题讨论】:

也可以看看 ggally 啊,哈德利,我没有看到你的评论。我的答案是CW,以免窃取您的信誉:) 【参考方案1】:

我一直想这样做,但 plotmatrix 是垃圾。 Hadley recommends 使用 GGally package 代替。它有一个函数,ggpairs,它是一个大大改进的配对图(允许您在数据框中使用非连续变量)。它根据变量类型在每个方格中绘制不同的图:

library(GGally)
ggpairs(iris, aes(colour = Species, alpha = 0.4))

【讨论】:

这真的很棒。值得注意的是,任何colour 变量都必须是一个因素;花了 45 分钟搞清楚这一点。 有没有办法绘制这些没有对的相关矩阵?例如,我需要绘制第一列与其他所有列。ggpairs 给出了非常可能的对。例如,我有 10 列,它给了我10 *10 =100。但我只想要第一列而不是其他 9 @Rgeek:您可以 melt 使用您感兴趣的变量作为 id 变量的数据框,然后由其他变量分面。 不要使用ggpairs,正常使用ggplot2即可,如ggplot(data, aes(x=id, y=value)) + geom_point() + facet_grid(.~variable)。当您说“相关图”时,我假设您在谈论散点图,因为我从未听说过。 @JimGreen GGally::ggpairs(iris, aes(colour = Species, alpha=0.4))【参考方案2】:

您可能想尝试 plotmatrix:

  library(ggplot2)
  data(mtcars)
  plotmatrix(mtcars[,1:3])

对我来说 mpg(mtcars 中的第一列)不应该是一个因素。我还没有检查过,但没有理由应该是一个。但是我得到一个散点图:)


注意:为了将来参考,plotmatrix() 函数已替换为 GGally 包中的 ggpairs() 函数,因为 @naught101 建议 in another response below 对此问题。

【讨论】:

我无法解决这个问题,它似乎需要公式右侧的因素。或者你能给我一个最小的例子吗? 有人知道如何添加颜色吗?我似乎无法让这个gist.github.com/1405150 工作 这个答案的第一部分是错误的,会引起混淆。你不能用分面来做配对图:你只能做 y by x 图,并按因素对它们进行分组。换句话说,通过分面,您在每个子图上都有相同的 x 和 y;对于对,每列有不同的 x,每行有不同的 y。 供将来参考,plotmatrix() 函数已替换为 GGally 包中的 ggpairs() 函数,正如 @naught101 在对该问题的另一个回复中所建议的那样。 @MattBannert 将评论添加到您的帖子中以使其更加明显,如果跳过阅读 cmets,我可以理解反对者。希望你不要介意。【参考方案3】:

如果想要获得ggplot 对象(不是ggmatrix,如ggpairs()),解决方案是将数据融合两次,然后将ggplot 与分面。如果提供了scales = 'free' 参数,facet_wrap 在限制绘图区域方面会比facet_grid 更好。

require(ggplot2) 
require(dplyr)
require(tidyr)

gatherpairs <- function(data, ..., 
                        xkey = '.xkey', xvalue = '.xvalue',
                        ykey = '.ykey', yvalue = '.yvalue',
                        na.rm = FALSE, convert = FALSE, factor_key = FALSE) 
  vars <- quos(...)
  xkey <- enquo(xkey)
  xvalue <- enquo(xvalue)
  ykey <- enquo(ykey)
  yvalue <- enquo(yvalue)

  data %>% 
    cbind(gather(., key = !!xkey, value = !!xvalue, !!!vars,
                 na.rm = na.rm, convert = convert, factor_key = factor_key),
          select(., !!!vars)) 
   %>% gather(., key = !!ykey, value = !!yvalue, !!!vars,
               na.rm = na.rm, convert = convert, factor_key = factor_key)


iris %>% 
  gatherpairs(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) %>% 
  ggplot(., aes(x = .xvalue, y = .yvalue, color = Species)) +
      geom_point() + 
      geom_smooth(method = 'lm') +
      facet_wrap(.xkey ~ .ykey, ncol = length(unique(.$.ykey)), scales = 'free', labeller = label_both) +
      scale_color_brewer(type = 'qual')

【讨论】:

【参考方案4】:

试试scatterPlotMatrix。它非常灵活,可以生成漂亮的交互式图表。

library(scatterPlotMatrix)
scatterPlotMatrix(iris, zAxisDim = "Species")

【讨论】:

以上是关于在 ggplot2 中创建散点图矩阵(pairs() 等效)的主要内容,如果未能解决你的问题,请参考以下文章

R语言pairs函数和ggpairs函数可视化实现散点图矩阵图实战

R语言散点图可视化:自定义标题和标签拟合回归线lowess为散点图添加平滑拟合线修改散点图中点颜色和点符号分组散点图添加图例pairs可视化散点图矩阵ggplt2可视化lattice

R语言pairs不能用于类变量吗

2018-10-31用R绘制散点图矩阵(成对的散点图)

R语言数据集探索性数据分析(exploratory data analysis, EDA)示例:所有特征的直方图可视化基于目标变量的分组可视化每个特征的箱图特征的相关性分析pairs散点图矩阵

R语言ggplot2可视化:ggplot2可视化分组散点图并使用geom_smooth函数在散点图图中为不同的散点簇添加对应的回归曲线