MATLAB绘制比例弦图 Chord Diagram
- [1 简介](#1 简介)
-
- [1.1 弦图简介](#1.1 弦图简介)
- [1.2 比例弦图简介](#1.2 比例弦图简介)
- [2 MATLAB绘制比例弦图](#2 MATLAB绘制比例弦图)
-
- [2.1 数据准备](#2.1 数据准备)
- [2.2 基本绘制](#2.2 基本绘制)
- [2.3 添加方向箭头](#2.3 添加方向箭头)
- [2.4 添加绘图间隙](#2.4 添加绘图间隙)
- [2.5 添加刻度](#2.5 添加刻度)
- [2.6 修改标签](#2.6 修改标签)
- [2.7 颜色设置](#2.7 颜色设置)
- [2.8 弧块及弦属性设置](#2.8 弧块及弦属性设置)
-
- [2.8.1 弧块属性设置](#2.8.1 弧块属性设置)
- [2.8.2 弦属性设置](#2.8.2 弦属性设置)
- [2.9 字体设置](#2.9 字体设置)
- 参考
1 简介
1.1 弦图简介
弦图(Chord Diagram) 简介可参见弦图简介。
弦图使用的是比例布局,就是同样节点之间的输入和输出都用同一条连接线显示。通常用于表示数据集及不同数据组之间的相似性。
节点围绕着圆周分布,点与点之间以弧线或贝塞尔曲线彼此连接以显示当中关系,然后再给每个连接分配数值(通过每个圆弧的大小比例表示)。此外,也可以用颜色将数据分成不同类别,有助于进行比较和区分。
弦图的缺点是过于混乱,尤其是当要显示太多连接的时候。
1.2 比例弦图简介
比例弦图(Proportional Chord Diagram) 是一种数据可视化工具,用于展示各类别之间的比例关系。它是弦图(Chord Diagram)的一种变体,弦图通常用于展示不同类别之间的关系和连接。比例弦图通过调整弦的宽度来反映各类别之间的数量或比例关系,使得观察者可以更直观地理解不同类别之间的比例关系。
比例弦图通常由一个圆形的环组成,环的每个弧段代表一个类别,弧段的宽度表示该类别的数量或比例大小。在环的内部,通过弦连接不同的类别,弦的宽度表示这两个类别之间的联系的强度或数量。
2 MATLAB绘制比例弦图
本代码参考 MATLAB | 全网唯一 MATLAB双向弦图(有向弦图)绘制,复现绘制得到。
2.1 数据准备
数据应准备全是非负数值的方形矩阵,矩阵第i行第j列表示由类i流向类j,第j行第i列表示由类j流向类i,也就是说矩阵是非对称的,可以同时统计两个类互相的数据流动,这里构造个随机数矩阵:
bash
% 导入数据
dataMat = randi([0,8],[6,6]);
2.2 基本绘制
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 基本绘制
figure(1)
BCC=biChordChart(dataMat);
BCC=BCC.draw();
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.1"+" 基本绘制", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
2.3 添加方向箭头
两侧都是弧形仅仅靠颜色不容易区分流入还是流出,因此可在创建对象时将Arrow属性设置为'on'
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 添加方向箭头
% 两侧都是弧形仅仅靠颜色不容易区分流入还是流出,因此可在创建对象时将Arrow属性设置为'on'
figure(2)
BCC=biChordChart(dataMat,'Arrow','on');
BCC=BCC.draw();
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.2"+" 添加方向箭头", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
2.4 添加绘图间隙
通过Sep属性可调整绘图间隙,例如设置为特别小的1/120:
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 添加绘图间隙
% 通过Sep属性可调整绘图间隙,例如设置为特别小的1/120:
figure(3)
BCC=biChordChart(dataMat,'Arrow','on','Sep',1/120);
BCC=BCC.draw();
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.3"+" 添加绘图间隙", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
2.5 添加刻度
通过tickState函数设置显示或者隐藏刻度:
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 添加刻度
% 通过tickState函数设置显示或者隐藏刻度:
figure(4)
BCC=biChordChart(dataMat,'Arrow','on');
BCC=BCC.draw();
% 添加刻度
BCC.tickState('on')
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.4"+" 添加刻度", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
2.6 修改标签
标签名字默认为C1,C2,C3,...可以通过Label属性进行修改
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 修改标签
% 标签名字默认为C1,C2,C3,...可以通过Label属性进行修改
% 添加标签名称
NameList={'Label1','Label2','Label3','Label4','Label5','Label6'};
figure(5)
BCC=biChordChart(dataMat,'Label',NameList,'Arrow','on');
BCC=BCC.draw();
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.5"+" 修改标签", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
2.7 颜色设置
可在draw绘图之前设置CData属性修改颜色
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 颜色设置
% 可在draw绘图之前设置CData属性修改颜色
ColorList=[127,91,93;153,66,83;95,127,95;9,14,10;78,70,83;0,0,0]./255;
figure(6)
BCC=biChordChart(dataMat,'Arrow','on','CData',ColorList);
BCC=BCC.draw();
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.6"+" 颜色设置", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
如果CData设置为空集,则会随机生成颜色:
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
% 如果CData设置为空集,则会随机生成颜色:
figure(7)
BCC=biChordChart(dataMat,'Arrow','on','CData',[]);
BCC=BCC.draw();
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.7"+" 颜色设置-随机生成", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
2.8 弧块及弦属性设置
2.8.1 弧块属性设置
通过:
- BCC.setSquareN
- BCC.setChordN
设置第n个弧块或第n类弦的属性,Patch对象具有的属性均可被设置
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 弧块及弦属性设置
% 通过BCC.setSquareN BCC.setChordN 设置第n个弧块或第n类弦的属性,Patch对象具有的属性均可被设置
figure(8)
BCC=biChordChart(dataMat,'Arrow','on');
BCC=BCC.draw();
ColorList=lines(6);
for i=1:6
BCC.setSquareN(i,'FaceColor',ColorList(i,:))
BCC.setChordN(i,'FaceColor',ColorList(i,:))
end
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.8"+" 弧块设置", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
2.8.2 弦属性设置
使用函数:
- setChordMN
函数可以单独修饰类m到类n的属性,例如找到比较大的弦并将边缘标记为红色。
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 弧块及弦属性设置
% 使用函数:setChordMN 函数可以单独修饰类m到类n的属性,例如找到比较大的弦并将边缘标记为红色:
figure(9)
BCC=biChordChart(dataMat,'Arrow','on');
BCC=BCC.draw();
% 标记最大值弦
[m,n]=find(dataMat==max(max(dataMat)));
for i=1:length(m)
BCC.setChordMN(m(i),n(i),'EdgeColor',[.8,0,0],'LineWidth',2)
end
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',22)
str= strcat(pathFigure, "Fig.9"+" 弦属性设置", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
2.9 字体设置
通过:
setFont函数进行字体设置
MATLAB实现代码如下:
bash
clc
close all
clear
%% 主函数说明-MATLAB绘制比例弦图 (Chord Diagram)
%% 基础设置
pathFigure= '.\Figures\' ;
%% 导入数据
dataMat = randi([0,8],[6,6]);
%% 字体设置
% 通过:setFont函数进行字体设置:
figure(10)
BCC=biChordChart(dataMat,'Arrow','on');
BCC=BCC.draw();
% 修改字体,字号及颜色
BCC.setFont('FontName','Times New Roman','FontSize',30,'Color',[0,0,.8])
str= strcat(pathFigure, "Fig.10"+" 字体设置", '.tiff');
print(gcf, '-dtiff', '-r600', str);
图形绘制如下:
参考
1、CSDN博客-MATLAB | 全网唯一 MATLAB双向弦图(有向弦图)绘制