桑基图(Sankey Chart)本质为一种流程图,可以很好地展示数据的层次结构以及流量变化。
桑基图主要由节点块与流动路径线组成。
其中,节点块用于表示类别;流动路径线除了可以直观地表示流动的方向,其宽度还代表着流量/数量的大小。
由于Matlab中未收录桑基图的绘制函数,因此需要大家自行解决。
本文使用改进后的plotSankeyFlowChart工具(Carlos Borau, MathWork, 2021)-SankeyChart,进行桑基图的绘制,先来看一下成品效果:
特别提示:本期内容『数据+代码』已上传资源群中,加群的朋友请自行下载。有需要的朋友可以关注同名公号【阿昆的科研日常】,后台回复关键词【绘图桶】查看加入方式。
1. 数据准备
此部分主要是读取原始数据并初始化绘图参数。
% 读取数据
tbl = readtable('data.xlsx');
% 转换分类数组
tbl.Age = categorical(tbl.Age);
tbl.Treatment = categorical(tbl.Treatment);
tbl.Surgery = categorical(tbl.Surgery);
tbl.Result = categorical(tbl.Result);
% 初始化绘图参数
data = tbl;
2. 颜色定义
作图不配色就好比做菜不放盐,总让人感觉少些味道。
但颜色搭配比较考验个人审美,需要多加尝试。
这里直接使用TheColor配色工具中的SCI权威配色库:
%% 颜色定义
N = 16; % N = 层数 * max(每层子单元数量), 4*max([4 3 2 3])
map = TheColor('sci',508);
map = map(1:16,:);
3. 桑基图绘制
调用‘SankeyChart’命令,绘制初始桑基图。
% 参数设置
options.figureWidth = 15; % 图片宽度(cm)
options.figureHeight = 14; % 图片高度(cm)
options.color_map = map; % 配色
options.flow_transparency = 0.7; % 流动路径线透明度
options.show_perc = false; % 是否显示节点块占比
options.text_color = [0 0 0]; % 文字颜色
options.show_layer_labels = true; % 是否坐标底部显示层名称
options.show_cat_labels = true; % 是否在节点块显示分类名称
options.show_legend = false; % 是否显示图例
% 绘图
SankeyChart(data,options);
4. 图像导出
最后,以期刊所需分辨率、格式输出图片。
%% 图片输出
exportgraphics(gca,'test.png','Resolution',300)
以上。