使用ggplot2实现成对组合

时间:2016-03-29 15:04:51

标签: r ggplot2 facet tidyr

我正在尝试使用ggplot2完成单个变量的所有成对散点图。类似于默认对()的东西,但我想用ggplot2操纵刻面和着色。这是我目前在ggplot2

中尝试的一个失败的例子
iris_melt = melt(iris)
ggplot(iris_melt, aes(value,value)) + geom_point() + facet_wrap(variable~variable)

enter image description here

我想要的是:

  • Sepal.Length vs Sepal.Width
  • Sepal.Length vs Petal.Length

我知道GGally的ggpairs会在这种情况下做到这一点,但是我想做自定义分面,我不明白为什么我需要'解开'数据而不是保持整洁

3 个答案:

答案 0 :(得分:1)

您可以为ggpairs提供自定义功能,以便您控制所有常用的ggplot参数

df <- read.table("test.txt")

upperfun <- function(data,mapping){
  ggplot(data = data, mapping = mapping)+
    geom_density2d()+
    scale_x_continuous(limits = c(-1.5,1.5))+
    scale_y_continuous(limits = c(-1.5,1.5))
}   

lowerfun <- function(data,mapping){
  ggplot(data = data, mapping = mapping)+
    geom_point()+
    scale_x_continuous(limits = c(-1.5,1.5))+
    scale_y_continuous(limits = c(-1.5,1.5))
}  


ggpairs(df,upper = list(continuous = wrap(upperfun)),
        lower = list(continuous = wrap(lowerfun)))   

有关数据和背景信息,请参阅this question

答案 1 :(得分:0)

已有内置功能

 library(GGally)
 ggpairs(iris)

答案 2 :(得分:-1)

关于堆栈溢出的另一篇文章建议您枚举数据,为每个比较创建一个额外的列:

Faceting plots by combinations of columns in ggplot2

这可以得到我想要的,但在多列之间进行成对组合时,它绝对不优雅。