You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggalluvial冲积图中按Type分组排序各Stratum层

问题:调整ggalluvial冲积图中层(Stratum)的垂直排序

我有如下格式的数据集:

results <-  as.data.frame(cbind(c("Violence", "Violence", "Violence", "Violence", "Economic", "Economic","Economic","Economic","Institutional","Institutional","Institutional","Institutional"), 
                                c("No", "No", "Yes", "Yes","No", "No", "Yes", "Yes", "No", "No", "Yes", "Yes"),
                                c("Yes", "No", "Yes", "No","Yes", "No", "Yes", "No", "Yes", "No", "Yes", "No"), 
                                c(3,3,1,3,4,5,8,7,6,5,4,3)))
colnames(results) <- c("Type", "Test1", "Test2", "Freq")

随后我使用ggalluvial包绘制冲积图,代码如下:

library(ggplot2)
library(tidyverse)
library(ggalluvial)

ggplot(data = results,
       aes(axis1 = Type, axis2 = Test1, axis3 = Test2,
           y = Freq)) +
  scale_x_discrete(limits = c("Article", "False 0s Removed", "New Flow Measure"), expand = c(.2, .05)) +
  xlab("Results") +
  geom_flow(aes(fill = Type)) +
  geom_stratum() +
  geom_text(stat = "stratum", aes(label = after_stat(stratum))) +
  theme_minimal() +
  ggtitle("Replication Summary")

当前绘图效果基本符合预期,但我希望每个Stratum(层)的垂直顺序按Type分组,使每个层类似条形图,便于查看各Type在Test1、Test2中“Yes”和“No”的占比。目前Test1层的排序符合要求,但Test2层未达到预期,请问该如何修改实现需求?


解决方案

要让所有轴的层都按Type分组排序,核心是通过order参数绑定Type字段,控制层内元素的垂直顺序,同时修复原数据的类型问题。

修改后的完整代码

library(ggplot2)
library(tidyverse)
library(ggalluvial)

# 将Freq列转为数值型(原数据通过cbind生成后为字符类型,会导致高度计算异常)
results$Freq <- as.numeric(results$Freq)

ggplot(data = results,
       aes(axis1 = Type, axis2 = Test1, axis3 = Test2,
           y = Freq)) +
  scale_x_discrete(limits = c("Article", "False 0s Removed", "New Flow Measure"), expand = c(.2, .05)) +
  xlab("Results") +
  # 指定flow的排序依据为Type,确保流向分组一致
  geom_flow(aes(fill = Type, order = Type)) +
  # 指定层的排序依据为Type,让每个轴的区块按Type分组排列
  geom_stratum(aes(order = Type)) +
  # 文本层同步排序,避免标签错位
  geom_text(stat = "stratum", aes(label = after_stat(stratum), order = Type)) +
  theme_minimal() +
  ggtitle("Replication Summary")

关键说明

  1. 修复数据类型:原数据中Freq列是字符类型,必须转为数值型才能正确计算层的高度,否则会出现绘图异常。
  2. 绑定order = Type:在geom_flow、geom_stratum、geom_text三个图层中都添加该参数,确保Test2轴的每个“Yes/No”类别下,Violence、Economic、Institutional三个分组保持和Type轴、Test1轴一致的垂直顺序,实现类似分组条形图的视觉效果。

内容的提问来源于stack exchange,提问作者Benjamin Krick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:23:26