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

ggalluvial绘图问题:如何让Stratum顺序遵循ARM数据集的原始输入顺序

解决ARM架构关系冲积图的顺序问题

我完全理解你作为R新手的困惑——默认的字母排序确实会把冲积图搞得一团糟,而且factor这类概念刚开始接触确实头大。别担心,咱们一步一步来解决这个问题:

核心问题根源

R在处理字符串类型的列时,会自动把它们转换成因子(factor),而默认的因子顺序是字母排序,这就是你的图里线条乱交叉的原因。咱们要做的就是手动指定每个列的因子顺序,让它严格遵循你原始数据里的出现顺序。

步骤1:把数据列转换成有序因子

先运行这段代码,把你的四个关键列(Profil、Familie、Architektur、Prozessor)转换成按原始顺序排列的因子:

# 按数据中首次出现的顺序设置因子水平
ARM$Profil <- factor(ARM$Profil, levels = unique(ARM$Profil))
ARM$Familie <- factor(ARM$Familie, levels = unique(ARM$Familie))
ARM$Architektur <- factor(ARM$Architektur, levels = unique(ARM$Architektur))
ARM$Prozessor <- factor(ARM$Prozessor, levels = unique(ARM$Prozessor))

解释一下:unique(ARM$Profil)会提取出Profil列里所有不重复的值,而且是按照它们在数据里第一次出现的顺序提取的——这正好是你想要的原始顺序。把这个设置为因子的levels,R就不会再用字母排序了。

步骤2:运行修改后的绘图代码

现在用你原来的绘图代码就行(如果没装依赖包先装一下):

# 先安装需要的包(第一次运行时执行)
install.packages(c("ggplot2", "alluvial", "ggfittext"))

library(ggplot2)
library(alluvial)
library(ggfittext)

ggplot(data = ARM, aes(axis1 = Profil, axis2 = Familie, axis3 = Architektur, axis4 = Prozessor)) + 
  geom_alluvium(aes(fill = Architektur)) + 
  stat_stratum() + 
  ggfittext::geom_fit_text(stat = "stratum", min.size = 0, aes(label = after_stat(stratum))) + 
  scale_x_discrete(limits = c("Profil", "Familie", "Architektur", "Prozessor"), expand = c(.2, .05)) +
  theme_void()

现在生成的图里,每个轴的分层都会严格按照你原始数据的顺序排列,线条交叉的情况会大大减少,视觉效果会清晰很多。

额外小提示

如果之后你更新了数据,只要原始顺序没变,这段代码依然有效——unique()会自动跟着新数据的首次出现顺序更新因子水平。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:52:30