【MATLAB基础绘图第21棒】绘制比例弦图 (Chord Diagram)

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,也就是说矩阵是非对称的,可以同时统计两个类互相的数据流动,这里构造个随机数矩阵:

% 导入数据
dataMat = randi([0,8],[6,6]);

2.2 基本绘制

MATLAB实现代码如下:

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实现代码如下:

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实现代码如下:

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实现代码如下:

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实现代码如下:

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实现代码如下:

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实现代码如下:

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实现代码如下:

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实现代码如下:

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实现代码如下:

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双向弦图(有向弦图)绘制

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WW、forever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值