是一种特定类型的流程图,主要用于描述一组值到另一组值的流向,图中分支的宽度即对应数据流量的大小。今天,小编就结合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