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

含重复行的DataFrame转lodes格式及ggalluvial绘图异常问题

解决ggalluvial复制数据后geom_flow报错及流向缺失问题

问题根源

  1. 原始数据格式不合法:执行rbind(d,d)后,每个individual在同一个timeperiod下存在重复的therapy记录,ggalluvial要求每个alluvium(个体)在每个x轴位置(时间点)只能对应一个stratum(治疗方案),重复行触发了格式验证错误。
  2. lodes格式转换参数错误:to_lodes_form的axes参数用于指定宽格式数据中作为x轴的列,你的数据本身已是长格式,axes=3的设置完全错误,导致转换后的数据映射逻辑混乱。
  3. 绘图映射错误:转换后的lodes数据中x轴对应的列是x,但绘图代码仍用timeperiod作为x的映射,导致流向无法被正确计算渲染。

解决方案

1. 处理重复行

先确保每个个体在每个时间点只有一条记录,通过去重实现:

d <- d %>% distinct(individual, timeperiod, .keep_all = TRUE)

2. 正确使用lodes格式(可选)

你的原始数据去重后已是合法的类lodes格式,可直接用于绘图;如果坚持要转换为标准lodes格式,需先将数据转成宽格式再转换:

# 先转宽格式
d_wide <- d %>% pivot_wider(names_from = timeperiod, values_from = therapy)
# 再转标准lodes格式
d_lodes <- to_lodes_form(d_wide, key = "x", value = "stratum", id = "alluvium")

3. 修正绘图代码

用去重后的原始数据绘图

ggplot(d, aes(x = timeperiod, stratum = therapy, alluvium = individual, fill = therapy, label = therapy)) +
  scale_fill_brewer(type = "qual", palette = "Set2") +
  geom_flow(stat = "alluvium", lode.guidance = "rightleft", color = "darkgray") +
  geom_stratum()

用转换后的lodes数据绘图(需修正x轴映射)

ggplot(d_lodes, aes(x = x, stratum = stratum, alluvium = alluvium, fill = stratum, label = stratum)) +
  scale_fill_brewer(type = "qual", palette = "Set2") +
  geom_flow(stat = "alluvium", lode.guidance = "rightleft", color = "darkgray") +
  geom_stratum()

执行上述操作后,报错会消失,流向也能正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:01:51