Scatterplot矩阵在R中使用两个数据帧

时间:2015-08-15 07:39:38

标签: r ggplot2 correlation scatter-plot

我想在我的数据帧中的一组变量(不是全部!)之间创建一个散点图矩阵。

我的dataFrame的快照:

V1    V2    V3    V4    V5    V6    V7    R1    R2
.08  .05   .93   .1    .21   .32    .21   .09  .07
.43  .12   .1   .40    .07   .98    .25   .10  .05

两组 V1至V7 R1-R2 。所以我想要实现的是 V1-R1 V1-R2 V2-R1 之间的情节...... V7-R2 。我不想绘制 V1-V2 V1-V4 等。

我认为一种简单的方法就是将我的数据框分成两部分,这样我就能实现目标。

所以我将数据框分成两部分,如下所示:

dataFrame1<-dataframe[,1:7]

dataFrame2<-dataframe[,8:9]

就从R中获取相关表而言,这很有效:

cor(dataFrame1,dataFrame2)

然而,绘图位有点挑战。

到目前为止,我已尝试 ggpairs car scatterplotMatrix ,但这些似乎都无法正常工作。

对于使用当前代码的ggpairs:

ggpairs (dataFrame1, dataFrame2)

我收到以下错误消息

  

确保您的“列”值为正。

当然,上面的dataFrame只是整个数据集的一个示例,因此您无法在R1和R2中看到任何底片。

我不想在ggplot2中手动执行,然后使用glob合并到单个图中。此外,我不想为所有变量绘制矩阵,因为这不是我想要实现的。

还有另一种方法可以达到我追求的目标吗?

感谢。

1 个答案:

答案 0 :(得分:1)

这是一个dplyr解决方案。你原来的第一个子集df到两个不同的data.frames;将它们变成一个长形式,ggplot需要;然后按行合并data.frames(我为其添加了一个id变量)并用facet_grid绘制结果。

# Simulating data
df <- data.frame(
  id = 1:100,
  V1 = rnorm(100),
  V2 = rnorm(100),
  V3 = rnorm(100),
  R1 = rnorm(100),
  R2 = rnorm(100),
  R3 = rnorm(100))

library(dplyr)
library(tidyr)

# Subset the data.frames
df1 <- select(df,id,starts_with("V"))
df2 <- select(df,id,starts_with("R"))

# Turn them both to long form and merge them
dft <- gather(df1,var,value,-id) %>% 
  left_join(gather(df2,var,value,-id),by="id")

ggplot(data = dft,aes(x = value.x,y=value.y)) +
  geom_point() +
  facet_grid(var.x~var.y)

enter image description here

在旁注中,您的代码会产生此错误,因为ggpairs不期望两个data.frames。见?GGally::ggpairs

  

ggpairs(data,columns = 1:ncol(data)...)

第二个参数应该是列索引;你正在传递一个完整的data.frame。 ggpairs似乎无法做你想做的事情,但是如果你只是将整个原始数据框传递给ggpairs(dataframe),它会将每个变量与其他变量相对应。