【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)是一种计算机高级程序设计语言&…

设计模式:中介者模式

中介者模式定义 中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个第三方对象(中介者)来管理一组对象之间的复杂交互。这些对象通过中介者而不是直接相互通信,从而减少了它们之间的耦合度…

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

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

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

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

【22.4】【22.5】【22.6】

【题解】2022年第四场寒假集训营题解 【题解】2022年第五场寒假集训营题解 【题解】2022牛客寒假算法基础集训营6 子序列权值乘积 思路:排序然后枚举 i i i 维护前缀中的信息即可。注意有坑:这道题要处理 2 k ( k ≤ 2 1 0 5 ) 2^k(k\leq 2\times…

go的实践

文章目录 用goroutine来替代mq做异步的应用心跳contenx的超时设置定时器break label核心代码 用goroutine来替代mq做异步的应用 方法在创建ai任务接口中用协程的方式异步调用go s.handleResultPolling(ctx, algorithm, taskId, iAiHandle),来更新ai任务的状态 心跳…

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…

Flutter第十弹 ScrollView滚动组件

目标: 1)滚动组件的特性? 2)有哪些常用的滚动组件? 一、基础滚动组件 Flutter有许多内置的小部件可以自动滚动,还提供了各种小部件,您可以自定义这些小部件来创建特定的滚动行为。 1.1 Scr…

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

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

深入理解汇编:平栈、CALL和RET指令详解

​视频学习下载地址:​​https://pan.quark.cn/s/04e6946a803a​​ 汇编语言以其接近硬件的特性和高效的执行速度,在系统编程、性能优化和逆向工程中占有不可或缺的地位。本文将深入探讨汇编语言中的平栈操作以及​​CALL​​​和​​RET​​指令&#…

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

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

如何理解泛型擦除机制的兼容性

让我们通过一个具体的例子来更好地理解泛型擦除机制的第一个优点,即确保向后兼容性。这个例子将展示在引入泛型之前和之后的代码是如何在同一Java虚拟机上运行的。 场景设置 假设在Java 5引入泛型之前,我们有一个处理字符串列表的Java类库。这个库在Ja…

Linux 使用用户级别的 systemd 服务

目录 使用用户级别的 systemd 服务示例 .service 文件内容然后执行以下命令使服务生效: 使用用户级别的 systemd 服务 可以创建一个用户级别的 systemd 服务来实现开机启动。这种方式更加灵活和规范,适用于需要长期运行的服务或后台任务。 创建一个 .s…

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

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

● Queryable State实现原理与配置方法

Queryable State 是 Apache Flink 提供的一个特性,它允许外部系统查询 Flink 作业的状态。这是通过将 Flink 的状态暴露为一个可查询接口来实现的,使得外部应用可以直接访问和查询 Flink 中的状态数据,而不需要触发整个 Flink 作业的计算。 …

浏览器原理之浏览器机制

事件机制 一 事件是什么?事件模型? 事件 是浏览器或用户自身发出的某种特定交互的信号。这包括但不限于鼠标点击、按键操作、页面加载、滚动等。 事件模型 主要包括三个阶段: 捕获阶段:事件从文档根节点向下传递到目标节点&am…

PyQt6实战7--文本编辑器

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

雷电模拟器+python

import os import time from compare import compare #上一段代码我存为了compare.pyclass Ldconsole: #请根据自己软件的路径来console rF:\leidian\LDPlayer9\dnconsole.exe ld rF:\leidian\LDPlayer9\ld.exeadb rF:\leidian\LDPlayer9\adb.exe #这个类其实不用写的&…

CSRF漏洞

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