大数跨境
0
0

NC图表复现:节点融合版桑基图

NC图表复现:节点融合版桑基图 R语言数据分析指南
2025-09-09
0

欢迎关注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年更新案例图展示

【声明】内容源于网络
0
0
R语言数据分析指南
R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
内容 1180
粉丝 0
R语言数据分析指南 R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
总阅读222
粉丝0
内容1.2k