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

MATLAB绘制比例弦图 Chord Diagram

  • 1 简介
    • 1.1 弦图简介
    • 1.2 比例弦图简介
  • 2 MATLAB绘制比例弦图
    • 2.1 数据准备
    • 2.2 基本绘制
    • 2.3 添加方向箭头
    • 2.4 添加绘图间隙
    • 2.5 添加刻度
    • 2.6 修改标签
    • 2.7 颜色设置
    • 2.8 弧块及弦属性设置
      • 2.8.1 弧块属性设置
      • 2.8.2 弦属性设置
    • 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,也就是说矩阵是非对称的,可以同时统计两个类互相的数据流动,这里构造个随机数矩阵:

% 导入数据
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:6BCC.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双向弦图(有向弦图)绘制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/826316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt 学习笔记】Qt常用控件 | 显示类控件Label的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件Label的使用及说明 文章编号:Qt 学…

C++必修:从C语言到C++的过渡(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. 什么是C C(c plus plus)是一种计算机高级程序设计语言&…

如何查看微信公众号发布文章的主图,如何看微信文章的主图,怎么才能拿到主图

如何查看,微信公众号发布文章的主图,如何看微信文章的主图 起因是这样的,当我看到一篇文章的时候,他的主图很漂亮,但是,正文里没有,而我又想看到,并且使用这张图片,该怎么…

十大排序——6.插入排序

这篇文章我们来介绍一下插入排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 插入排序的要点如下所示: 首先将数组分为两部分[ 0 ... low-1 ],[ low ... arr.length-1 ],然后,我们假设左边[ 0 ... low-1 ]是已排好序的部分…

Python如何调用rar命令

通过os模块的system()方法调用了系统的rar.exe命令,这个方法会返回一个变量exit_status。 import os import time source [r‘D:\Work\Python\Demo‘, ‘d:\\work\\linux‘] target_dir ‘D:\\Work\\backup\\‘ target target_dir time.strftime(‘%Y%m%d%H%M%S…

【单元测试】Junit 4--junit4 内置Rule

1.0 Rules ​ Rules允许非常灵活地添加或重新定义一个测试类中每个测试方法的行为。测试人员可以重复使用或扩展下面提供的Rules之一,或编写自己的Rules。 1.1 TestName ​ TestName Rule使当前的测试名称在测试方法中可用。用于在测试执行过程中获取测试方法名称…

计算机网络实验实验之VLAN的配置与分析

实验目的 了解什么是带内管理;熟练掌握如何使用telnet方式管理交换机;熟练掌握如何为交换机设置web方式管理;熟练掌握如何进入交换机web管理方式;了解交换机web配置界面,并能进行部分操作。 (6)了解VLAN原理&#xf…

不敢说懂你 - Glide硬核源码剖析

问题 Glide加载流程? Glide整体架构? Glide数据加载的来源? Glide缓存加载的流程? Glide线程切换原理? Glide如何感知Activity? Glide哪种情况会返回应用级的RequestManager? … 带着一些问题去阅读… 使用示例 本篇主要基于glide:4.12.0进行分析。下面是Gli…

PyQt6实战7--文本编辑器

一个简单的文本编辑器 features: 1.open 一个文件夹作为项目 2.save 保存当前窗口的内容 3.退出 4.双击文件可以打开文件内容 5.简单的python高亮 6.双击相同文件,会找到之前打开过的文件 打开一个文件夹 打开项目,双击打开文件 保存 代码&#xf…

CSRF漏洞

文章目录 目录 文章目录 一.什么是CSRF 二.CSRF漏洞工作原理 一.什么是CSRF CSRF(Cross-Site Request Forgery)漏洞,也被称为跨站请求伪造漏洞,是一种Web应用程序安全漏洞。当受害者在已经登录了某个网站的情况下,访问…

吴恩达机器学习笔记 三十五 异常检测与监督学习

什么时候选择异常检测? 正样本 ( y 1 ) 的数量非常少 负样本 ( y 0 ) 的数量非常多 有很多不同的异常,现有的算法不能从正样本中得知什么是异常,或未来可能出现完全没见过的异常情况。 例如金融欺诈,隔几个月或几年就有新的…

java+idea+mysql采用医疗AI自然语言处理技术的3D智能导诊导系统源码

javaideamysql采用医疗AI自然语言处理技术的3D智能导诊导系统源码 随着人工智能技术的快速发展,语音识别与自然语言理解技术的成熟应用,基于人工智能的智能导诊导医逐渐出现在患者的生活视角中,智能导诊系统应用到医院就医场景中&#xff0c…

jvm-接口调用排查

问题描述 线上碰到个问题,某个接口调用时间特别长,线上调用接口直接报gateway time out 分析处理 1、先关闭该功能 (该功能是非核心功能) 2、本地起服务连环境排查,发现本地正常。并且线上其他接口正常,…

顺序表复习(C语言版)

数据结构是什么? 数据结构就是为了把数据管理起来,方便我们的增删查改 数据结构是计算机存储、组织数据的方式 数组就是一种最基础的数据结构 顺序表是什么? 顺序表就是数组 Int arr[100] {1,2,3,4,5,x,……} 修改某个数据&#xff1a…

Mac下删除旧版本.net sdk

参照微软官网给的方法,Releases dotnet/cli-lab (github.com) 好像不能直接的解决问题,我做一下补充,希望对需要删除旧版本sdk的小伙伴们有所帮助 1:下载工具包 Releases dotnet/cli-lab (github.com) 2:打开终端,cd切换到该文件的制定目录 3:然后按照提示一步步执行…

java核心类

一,String字符串 1.1,String字符串是引用类型,且不可变 String str1 "Hello";String str2 str1.concat(" World"); // 使用concat方法连接字符串,返回一个新的字符串对象System.out.println(str1); // 输出:Hello,原始…

C语言:复习

文章目录 思维导图数组和指针库函数的模拟实现判断大小端 最近知识学的差不多了,因此开始复习,本篇开始的是对于C语言的复习 思维导图 下面就依据下图,进行内容的整理 数组和指针 这个模块算是C语言中比较大的一个模块了,具体概…

流媒体协议--RTMP

文章目录 RTMP播放基本流程TCP握手过程RTMP握手过程connect连接createStream 创建流play 播放命令deleteStream删除流RTMP数据组成 RTMP(Real Time Messaging Protocol)是一个应用层协议,主要用于在Flash player和服务器之间传输视频、音频、控制命令等内容。 该协议…

【笔试强训_Day06】

文章目录 1.字符串相乘 1.字符串相乘 题目链接 解题思路: 高精度乘法,注意要学会下面这种列式相乘的形式🍎 注意细节❗: ① 🍎 首先把列式相乘的数据都存放到数组中去, 然后再对数组中的数据进行取余进…

C++:运算符重载和“const”成员

hello,各位小伙伴,本篇文章跟大家一起学习《C:运算符重载》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 文章目录 赋值运算符重载1. 运算符重载2.赋值运算符重载第一个点第二个点&…