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

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

相关推荐
哈听星14 小时前
解非线性方程组
数学建模·matlab
亚图跨际14 小时前
MATLAB和R及Python伪时间分析
python·matlab·r语言·伪时间分析
fanxbl95716 小时前
LVQ 神经网络的 MATLAB 函数详解
人工智能·神经网络·matlab
吃葡萄不图葡萄皮16 小时前
3D绘制动态爱心Matlab
开发语言·matlab
远望清一色19 小时前
基于MATLAB边缘检测博文
开发语言·算法·matlab
远望清一色21 小时前
基于MATLAB的图片中文字的提取及识别
算法·matlab
黑曼巴、。;1 天前
直方图均衡化及Matlab实现
图像处理·计算机视觉·matlab
慕容复之巅1 天前
基于MATLAB+opencv人脸疲劳检测
开发语言·opencv·matlab
MATLAB滤波2 天前
鲁棒自适应滤波,MATLAB
开发语言·算法·matlab
摆烂仙君2 天前
matlab建模入门指导
开发语言·matlab