在 R 中使用两个数据帧的散点图矩阵
Scatterplot matrix using two dataframes in R
我想在我的数据框中的一组变量(不是全部!)之间创建一个散点图矩阵。
我的数据帧的快速快照:
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[= 之间的情节63=].......V7-R2.我不想绘制 V1-V2、V1-V4 等
我认为实现此目的的一种简单方法是将我的数据框分成两部分,这将使我能够实现我的目标。
所以我将数据框分成两部分,如下所示:
dataFrame1<-dataframe[,1:7]
dataFrame2<-dataframe[,8:9]
就从 R 中获取相关性 table 而言,这很有效:
cor(dataFrame1,dataFrame2)
但是绘图位有点挑战。
到目前为止,我已经尝试了 ggpairs、car 和 scatterplotMatrix 和 none 他们似乎工作。
对于 ggpairs 使用当前代码如下:
ggpairs (dataFrame1, dataFrame2)
我收到以下错误消息
Make sure your 'columns' values are positive.
当然上面的数据帧只是整个数据集的一个样本,因此你在 R1 和 R2 中看不到任何负数。
我不想在 ggplot2 中手动完成,然后使用 glob 合并成一个图。此外,我不想按原样绘制所有变量的矩阵,因为这不是我想要实现的目标。
还有其他方法可以实现我的目标吗?
谢谢。
这是一个 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)
附带说明一下,您的代码会产生此错误,因为 ggpairs
不需要两个 data.frames。见 ?GGally::ggpairs
:
ggpairs(data, columns = 1:ncol(data) ...)
第二个参数应该是列索引;您正在传递整个 data.frame。 ggpairs
似乎不能做你想做的事,但如果你只是将整个原始数据帧传递给它,它会把每个变量相互绘制:ggpairs(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[= 之间的情节63=].......V7-R2.我不想绘制 V1-V2、V1-V4 等
我认为实现此目的的一种简单方法是将我的数据框分成两部分,这将使我能够实现我的目标。
所以我将数据框分成两部分,如下所示:
dataFrame1<-dataframe[,1:7]
dataFrame2<-dataframe[,8:9]
就从 R 中获取相关性 table 而言,这很有效:
cor(dataFrame1,dataFrame2)
但是绘图位有点挑战。
到目前为止,我已经尝试了 ggpairs、car 和 scatterplotMatrix 和 none 他们似乎工作。
对于 ggpairs 使用当前代码如下:
ggpairs (dataFrame1, dataFrame2)
我收到以下错误消息
Make sure your 'columns' values are positive.
当然上面的数据帧只是整个数据集的一个样本,因此你在 R1 和 R2 中看不到任何负数。
我不想在 ggplot2 中手动完成,然后使用 glob 合并成一个图。此外,我不想按原样绘制所有变量的矩阵,因为这不是我想要实现的目标。
还有其他方法可以实现我的目标吗?
谢谢。
这是一个 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)
附带说明一下,您的代码会产生此错误,因为 ggpairs
不需要两个 data.frames。见 ?GGally::ggpairs
:
ggpairs(data, columns = 1:ncol(data) ...)
第二个参数应该是列索引;您正在传递整个 data.frame。 ggpairs
似乎不能做你想做的事,但如果你只是将整个原始数据帧传递给它,它会把每个变量相互绘制:ggpairs(dataframe)
。