欢迎关注R语言数据分析指南
❝本节来通过nature communications上的一篇新论文,来介绍一张特殊桑基图的绘制。论文作者提供了图表对应的数据,小编根据个人理解来进行数据处理及绘图,结果与原文有所不同,个人观点仅供参考。有需要学习R语言绘图的朋友可关注文末介绍购买小编的R绘图文档。购买前请咨询,零基础不要买。
论文信息
Unique plastisphere viromes with habitat-dependent potential for modulating global methane cycle
Chen, XP., Zhu, D., Liu, SY. et al. Unique plastisphere viromes with habitat-dependent potential for modulating global methane cycle. Nat Commun 16, 8098 (2025). https://doi.org/10.1038/s41467-025-63215-6
论文原图
仿图
论文数据
思路解读
在这个数据结构中,前半部分对应 1–2 层级关系,后半部分对应 2–3 层级关系。因此在绘图之前,第一步要做的就是对数据进行拆分。后续我们使用 ggsankeyfier 包来绘制桑基图。
不过,这幅图和常见的桑基图有一个显著的不同点:
仔细观察图中的第二层节点,可以看到第一层流向该节点的边线,只占节点下方的一小部分。换句话说,第二层节点的整体高度并不是由 1–2 层关系直接决定的,而是需要根据 2–3 层关系的数据量来确定。
因此,如果直接使用原始的 1–2 层级数据进行绘制,会导致第二层节点的高度与实际不符。
正确的做法是对数据进行融合,即:第二层节点的高度要由 2–3 层级数据来决定。
这一步就对应着下方数据中edge_id列的21–24,也就是对原始数据进行调整和合并的部分。这样处理之后,绘图结果才能与论文中的结构保持一致。
> dff1 <- df1 %>% bind_rows(v1 %>% mutate(Value=v1$Value-v2$Value)) %>%
+ mutate(stage=factor(stage,levels = c("Source","Target")))
> tail(dff1)
# A tibble: 6 × 5
Value edge_id connector node stage
<dbl> <dbl> <chr> <fct> <fct>
14.56 20 from Unclassified Source
24.56 20 to WP Target
348.8 21 to S Target
436.8 22 to SP Target
540.3 23 to W Target
641.5 24 to WP Target
代码展示部分
library(tidyverse)
library(ggsankeyfier)
library(magrittr)
library(RColorBrewer)
# 绘图
ggplot(data=dff1,aes(x = stage,y =Value,group = node,
edge_id = edge_id,connector = connector,fill=node))+
geom_sankeyedge(position = pos) +
geom_sankeynode(color="white",position = pos)+
geom_text(data=dff1 %>% filter(connector=="from"),aes(label = node),
stat = "sankeynode",
position = position_sankey(v_space =2),
hjust=1.2,size=3) +
geom_text(data=dff1 %>% filter(connector=="to"),
aes(label = node),stat = "sankeynode",
position = position_sankey(v_space=2,nudge_x = -0.01),
hjust=1.5,size=3) +
geom_sankeyedge(data=df2,position = pos) +
geom_sankeynode(data=df2,color="white",position = pos) +
geom_text(data=df2 %>% filter(connector=="to"),aes(label = node),
stat = "sankeynode",
position = position_sankey(v_space=2,nudge_x = 0.03),
hjust=0,size=3) +
scale_fill_manual(values = colorRampPalette(brewer.pal(12,"Paired"))(24)) +
theme_void() +
theme(legend.position = "none")
关注下方公众号下回更新不迷路
购买介绍
❝本节介绍到此结束,需要获取下方所示R绘图案例全部代码的读者,欢迎到淘宝店铺:R语言数据分析指南,购买小编的R语言可视化文档,2025年购买将获取2025年更新的绘图内容,同时将赠送2024年的绘图文档内容,其余内容无。
更新的绘图内容包含数据+代码+注释文档+文档清单,小编只分享案例文档,不额外回答问题,无答疑服务,更新截止2025年12月31日结束,后续不在进行任何更新,零基础基础一般不推荐买。
在线目录大纲
淘宝店铺
2025年更新案例图展示




















