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

有没有可能用 ggplot2绘制一个散点图的矩阵,使用 ggplot的漂亮功能,如映射附加因素的颜色,形状等,并添加平滑?

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

94838 次浏览

你可能想试试 plotMatrix:

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

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


注意: 为了以后的参考,plotmatrix()函数已经被来自 GGally包的 ggpairs()函数所替代,正如@aught101对这个问题所建议的 在下面的另一个回应中一样。

我一直想这样做,但情节矩阵是垃圾。哈德利 建议使用 GGally 包裹代替。它有一个函数,有人吗,这是一个大大改进的对图(允许您在数据帧中使用非连续变量)。它根据变量类型在每个方块中绘制不同的图形:

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

enter image description here

如果要获得 ggplot对象(而不是 ggpairs()中的 ggmatrix) ,解决方案是将数据融化两次,然后使用切面处理 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')
}

enter image description here

尝试使用 散布情节矩阵。它非常灵活,可以生成看起来不错的交互式图表。

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

enter image description here