我们可以在 R 中制作一个冲积图来显示多个双变量分布而不是完整的多变量分布吗?

Can we make an alluvial plot in R to display multiple bivariate distributions instead of the full multivariate distribution?

我想在 R 中显示多个双变量分布,而不是完整的多变量分布。 vignette of the alluvial package 中提供的以下代码使用冲积图显示泰坦尼克号数据集的(Class、性别、年龄、存活)的完整多元分布。

require(dplyr)
require(alluvial)
tit <- as.data.frame(Titanic, stringsAsFactors = FALSE)
head(tit)
alluvial(tit[,1:4], freq=tit$Freq,
     col = ifelse(tit$Survived == "Yes", "orange", "grey"),
     border = ifelse(tit$Survived == "Yes", "orange", "grey"),
     hide = tit$Freq == 0,
     cex = 0.7)

我不想将完整的多元分布可视化,而是想使用单个冲积图可视化双变量分布 (Class,Sex), (Sex,Age), & (Age, Survived)。三个双变量分布的计数是

tit%>%group_by(Class,Sex)%>%summarize(Freq=sum(Freq))%>%ungroup() 
tit%>%group_by(Sex,Age)%>%summarize(Freq=sum(Freq))%>%ungroup()
tit%>%group_by(Age,Survived)%>%summarize(Freq=sum(Freq))%>%ungroup()

你知道使用冲积包还是其他包是否可行?

对于这个特定的例子,使用冲积地块可能看起来很可疑。但是当变量是有序的并且当我们想要可视化 (var1,var2), (var2,var3),...

的双变量分布时,它是完全有意义的

设置三个冲积地块在一起你可以做如下。

请注意 countdplyr 更紧凑的 group_by + summarise + ungroup.

library(dplyr)
library(alluvial)

tit <- as.data.frame(Titanic, stringsAsFactors = TRUE)

oldpar <- par(mfrow=c(1, 3)) # set up alignment

with(count(tit, Class, Sex     , wt = Freq), alluvial(Class, Sex     , freq = n))
with(count(tit, Sex  , Age     , wt = Freq), alluvial(Sex  , Age     , freq = n))
with(count(tit, Age  , Survived, wt = Freq), alluvial(Age  , Survived, freq = n))

par(oldpar) # reset par

每次修改 par 时重置它是一个好习惯,因为它是一个通用选项,可能会影响代码的其他部分。