查看原文
其他

R可视化——基于ggplot2和ggalluvial包绘制桑基图

王志山 科研后花园 2023-09-08

桑基图(Sankey diagram)是一种特定类型的流程图,主要用于描述一组值到另一组值的流向,图中分支的宽度即对应数据流量的大小。今天,小编就结合ggplot2包和ggalluvial包给大家展现一下如何绘制一张桑基图!

安装、加载R包

主要用到两个包——ggplot2和ggalluvial:

rm(list=ls())#设置工作环境setwd("D:\\桑基图")
#下载包install.packages("ggplot2")install.packages("ggalluvial")#载入包library(ggplot2)library(ggalluvial)

数据

1、加载数据——用于展现对应关系的数据,根据个人需求进行调整:

data <- read.table("data.txt",header = T, check.names = F)


2、格式转换——通过to_lodes_form函数将数据转换为作图所需要的数据:

df <- to_lodes_form(data[,1:ncol(data)], axes = 1:ncol(data), id = "value")print(df)#预览数据

绘图

通过PDF绘制,所以绘图前需要新建一个PDF文件然后在其中进行绘图,通过更改geom_flow函数中的 curve_type参数可以绘制不同样式的图形:
##绘制桑基图(Sankey diagram)col<- rep(c('#2e1f54', '#52057f', '#bf033b', '#f00a36', '#ed3b21', '#ff6908', '#ffc719', '#598c14', '#335238', '#4a8594', '#051736', '#dbe0e3'), 3)#自定义颜色#新建一个PDF文件pdf("test.pdf",width = 8, height = 6)#绘图ggplot(df, aes(x = x, fill=stratum, label=stratum, stratum = stratum, alluvium = value))+#数据 geom_flow(width = 0.3,#连线宽度 curve_type = "sine",#曲线形状,有linear、cubic、quintic、sine、arctangent、sigmoid几种类型可供调整 alpha = 0.5,#透明度 color = 'white',#间隔颜色 size = 0.1)+#间隔宽度 geom_stratum(width = 0.28)+#图中方块的宽度 geom_text(stat = 'stratum', size = 2, color = 'black')+ scale_fill_manual(values = col)+#自定义颜色 theme_void()+#主题(无轴及网格线) theme(legend.position = 'none')#去除图例dev.off()#关闭PDF


参考:https://zhuanlan.zhihu.com/p/555785174

源码及数据可在后台回复"桑基图"获取!

我就知道你“在看”

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存