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

相关推荐
Evand J3 小时前
【MATLAB复现RRT(快速随机树)算法】用于二维平面上的无人车路径规划与避障,含性能分析与可视化
算法·matlab·平面·无人车·rrt·避障
s09071364 小时前
【声纳成像】基于滑动子孔径与加权拼接的条带式多子阵SAS连续成像(MATLAB仿真)
开发语言·算法·matlab·合成孔径声呐·后向投影算法·条带拼接
IT猿手6 小时前
基于 ZOH 离散化与增量 PID 的四旋翼无人机轨迹跟踪控制研究,MATLAB代码
开发语言·算法·matlab·无人机·动态路径规划·openclaw
IT猿手6 小时前
基于控制障碍函数(Control Barrier Function, CBF)的无人机编队三维动态避障路径规划,MATLAB代码
开发语言·matlab·无人机·动态路径规划·无人机编队
SugarFreeOixi6 小时前
MATLAB绘图风格记录NP类型
python·matlab·numpy
IT猿手6 小时前
基于 CBF 的多无人机编队动态避障路径规划研究,无人机及障碍物数量可以自定义修改,MATLAB代码
开发语言·matlab·无人机·动态路径规划
IT猿手9 小时前
基于强化学习Q-learning算法的无人机三维路径规划算法原理与实现,MATLAB代码
算法·matlab·无人机·路径规划·动态路径规划
ghie909011 小时前
拉普拉斯金字塔图像融合MATLAB仿真程序
人工智能·计算机视觉·matlab
IT猿手13 小时前
基于动态三维环境下的Q-Learning算法无人机自主避障路径规划研究,MATLAB代码
算法·matlab·无人机·动态路径规划·多无人机动态避障路径规划
Evand J1 天前
【三维飞行器】RRT路径规划与TOA定位仿真系统,MATLAB例程,路径起终点、障碍物、TOA锚点等均可设置。附下载链接
开发语言·matlab·无人机·定位·rrt·toa·三维航迹规划