具有 2 个不同来源但有一个收敛/共享变量的冲积地块 [R]

Posted

技术标签:

【中文标题】具有 2 个不同来源但有一个收敛/共享变量的冲积地块 [R]【英文标题】:Alluvial plot with 2 different sources but a converging/shared variable [R] 【发布时间】:2022-01-13 21:32:09 【问题描述】:

我有使用ggalluvial 包制作冲积地块的经验。但是,我遇到了一个问题,我试图用两个不同的来源创建一个冲积地块,这些来源汇聚到一个变量上。

这里是示例数据

library(dplyr)
library(ggplot2)
library(ggalluvial)

data <- data.frame(
  unique_alluvium_entires = seq(1:10),
  label_1 = c("A", "B", "C", "D", "E", rep(NA, 5)),
  label_2 = c(rep(NA, 5), "F", "G", "H", "I", "J"),
  shared_label = c("a", "b", "c", "c", "c", "c", "c", "a", "a", "b")
)

这是我用来制作情节的代码

#prep the data
data <- data %>%
  group_by(shared_label) %>%
  mutate(freq = n())

data <- reshape2::melt(data, id.vars = c("unique_alluvium_entires", "freq"))
data$variable <- factor(data$variable, levels = c("label_1", "shared_label", "label_2"))

#ggplot
ggplot(data,
       aes(x = variable, stratum = value, alluvium = unique_alluvium_entires,
           y = freq, fill = value, label = value)) +
  scale_x_discrete(expand = c(.1, .1)) + 
  geom_flow() +
  geom_stratum(color = "grey", width = 1/4, na.rm = TRUE) +
  geom_text(stat = "stratum", size = 4) +
  theme_void() +
  theme(
   axis.text.x = element_text(size = 12, face = "bold")
  )

(显然我还不能嵌入图片)

如您所见,我可以删除 NA 值,但 shared_label 不能正确“堆叠”。在shared_label 列中,每个唯一行都应堆叠在一起。这也将解决大小问题,使它们沿 y 轴大小相等。

任何想法如何解决这个问题?我尝试过ggsankey,但出现了同样的问题,我无法删除NA 值。非常感谢任何提示!

【问题讨论】:

【参考方案1】:

此图是“流”统计变换的预期结果,是“流”图形对象的默认值。 (即geom_flow() = geom_flow(stat = "flow")。)看起来您想要指定“冲积层”统计转换。下面我使用了你所有的代码,但只复制和编辑了ggplot() 调用。

#ggplot
ggplot(data,
       aes(x = variable, stratum = value, alluvium = unique_alluvium_entires,
           y = freq, fill = value, label = value)) +
  scale_x_discrete(expand = c(.1, .1)) +
  geom_flow(stat = "alluvium") +  # <-- specify alternate stat
  geom_stratum(color = "grey", width = 1/4, na.rm = TRUE) +
  geom_text(stat = "stratum", size = 4) +
  theme_void() +
  theme(
    axis.text.x = element_text(size = 12, face = "bold")
  )
#> Warning: Removed 2 rows containing missing values (geom_text).

由reprex package (v2.0.1) 于 2021 年 12 月 10 日创建

【讨论】:

这行得通。谢谢!

以上是关于具有 2 个不同来源但有一个收敛/共享变量的冲积地块 [R]的主要内容,如果未能解决你的问题,请参考以下文章

更有效地进行多重回归模型(总共 8 个:2 个模型包含不同的预测变量和 4 个不同的结果)

如何让一个向量接受具有相同基类的 2 个不同的类?

如何在具有不同库共享变量的 monorepo 中管理 SCSS 样式表?

计算R中具有不同来源和范围的2个栅格图层之间的重叠区域

如何使用冲积图(或桑基图)使用 R 显示类别随时间的变化

2 个具有相同功能但变量名不同的 C++ 类 - 使用哪种模式?