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

news2024/11/18 9:07:55

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

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

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

相关文章

手写Java设计模式之工厂模式,附源码解读

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 工厂模式属于创建型…

11.盛最多水的容器(Java,双指针)

目录 题目描述:输入:输出:代码实现: 题目描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同…

不同条件累加(C语言)

一、题目&#xff1b; 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;float result1 0;float result2 0;float result…

如何查找一篇英文文献的源代码?(论文中没有源代码链接时)如何查找一篇论文的实现代码从而复现论文?

有两个网址&#xff0c;从这两个网址里面能找到论文相关代码&#xff0c;但不确定是不是人家论文里的源代码&#xff0c;但是根据论文实在找不到的情况下&#xff0c;只能试试这两个网址了 1. https://paperswithcode.com/ 2. https://www.catalyzex.com/

Java 集合(ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet)【补充复习】

Java 集合&#xff08;ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet&#xff09;【补充复习】 Java 集合概述Collection 接口继承树Map 接口继承树 Collection 接口方法使用 iterator 接口遍历集合元素使用 forearch 遍历集合元素 List 接口List 实…

数据采集技术综合项目实战3(网络爬虫+数据预处理+数据可视化)附带详细步骤说明,干货满满

项目介绍及需求&#xff1a; 本项目主要是通过对b站电影弹幕进行采集并分析。1.获得弹幕高频词生成符合该电影特征、主题、角色等相关字段的词云图&#xff0c;通过词云图的方式对某部电影主题具体化。2.获取用户年内评论发布时间观生成时间的折线图&#xff0c;以便从侧面观察…

【图解计算机网络】从浏览器地址输入到网页显示的整个过程

从浏览器地址输入到网页显示的整个过程 整体流程DHCPhttp协议报文组装DNSTCP协议封装与TCP三次握手IP协议封装与路由表MAC地址与ARP协议交换机路由器 整体流程 从往浏览器输入一个地址到网页的显示&#xff0c;要经过很长的一个流程&#xff0c;中间涉及到计算机网络的许多知识…

【ARM 裸机】I.MX 启动方式之启动头文件 1

接上一节&#xff1a;【ARM 裸机】I.MX 启动方式之启动设备的选择&#xff1b; 2、启动头文件 当 BOOT_MODE1 为 1&#xff0c;BOOT_MODE0 为 0 的时候此内部 BOOT 模式&#xff0c;在此模式下&#xff0c;芯片会执 行内部的 BOOT ROM 代码&#xff0c;这段 BOOT ROM 代码会进…

按钮(秒懂CSS按钮的使用)

目录 一、按钮介绍 1.概念 2.特点 3.功能 二、按钮用法 1.按钮的使用 2.按钮的样式 3.按钮颜色 4.按钮大小 5.圆角按钮 6.按钮边框颜色 7.按钮鼠标悬停 8.按钮阴影 9.禁用按钮 10.按钮宽度 三、按钮实例 1.交互式按钮 2.扩展动画按钮 3.播放/暂停按钮 四、应用场景…

【Day 3】Ajax + Vue 项目、路由 + Nginx

1 Ajax Asynchronous JavaScript And XML 异步的 JavaScript 和 XML 作用&#xff1a; 数据交换 通过 Ajax 可以给服务器发送请求&#xff0c;并获取服务器响应的数据 异步交互 可以在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页的技术&#xf…

【JavaSE】浅谈Java异常

前言 本篇文章是对Java异常体系相关内容及部分注意事项的的讲解。 一. 认识异常 在每个人的生命历程中&#xff0c;或多或少都会遇到生病或受伤的情况&#xff0c;比如&#xff1a;皮肤擦伤、感冒、发烧、患上某些传染病等等。不管“病情”严重与否&#xff0c;这些都可以算…

java学习笔记1

1 初识java 1.1 jdk安装 1.1.1 下载jdk https://www.oracle.com/java/technologies/downloads/#java8-windows1.1.2 安装jdk jdk-8u361-windows-x64.exe安装到D:\Program Files\Java\jdk1.8.0_361安装jre,修改地址到D:\Program Files\Java\jre1.8.0_361jdk安装成功1.1.3 配置…

常见的七种排序

目录 一、插入排序 1、直接插入排序 2、希尔排序&#xff08;缩小增量排序&#xff09; 二、选择排序 3、直接选择排序 4、堆排序 三、交换排序 5、冒泡排序 6、快速排序 四、归并排序 7、归并排序 五、总结 一、插入排序 1、直接插入排序 思路&#xff1a; i 用来…

Python革命:如何利用AI数据分析引领人工智能的未来

在人工智能迅速发展的今天&#xff0c;Python语言已经成为了推动AI领域发展的一大利器。作为一种高级编程语言&#xff0c;Python以其简洁的语法和强大的功能&#xff0c;为AI数据分析提供了强有力的支持&#xff0c;帮助开启了人工智能的新时代。 Python的核心优势 Python的最…

NLP_知识图谱_三元组实战

文章目录 三元组含义如何构建知识图谱模型的整体结构基于transformers框架的三元组抽取baselinehow to use预训练模型下载地址训练数据下载地址 结构图代码及数据bertconfig.jsonvocab.txt datadev.jsonschemas.jsontrain.jsonvocab.json 与bert跟data同个目录model.pytrain.py…

Java——继承方式

在现实生活中&#xff0c;事物之间的关系是非常复杂&#xff0c;灵活多样&#xff0c;比如&#xff1a; 但在Java中只支持以下几种继承方式&#xff1a; 注意&#xff1a;Java中不支持多继承。 时刻牢记&#xff0c;我们写的类是现实事物的抽象。而我们真正在公司中所遇到的…

基于SpringBoot+Vue的外卖点餐网站 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库&#xff1a;Mysql5.7/8.0 数据表&#xff1a;12张 开发语言&#xff1a;Java(jdk1.8) 开发工具&#xff1a;idea 前端技术&#xff1a;vue html 后端技术&#xff1a;SpringBoot 功能简介 (有文档) 项目获取关键字&…

MATLAB设置变量

您可以通过简单的方式分配变量。例如&#xff0c; 示例 x 3 %定义x并用值初始化它 MATLAB将执行上述语句并返回以下结果- x 3 它创建一个名为x的1乘1矩阵&#xff0c;并将值3存储在其元素中。再举一个实例&#xff0c; 示例 x sqrt(16) %定义x并用表达式初始化它 MATLAB将…

Arduino UNO驱动MPR121接近电容式触摸传感器控制WS2812彩灯

简介 MPR121芯片功能强大可用作触摸,电容检测,驱动LED等等.在低速扫描下可以将功 耗降低到8μA,可以处理多达12个独立的触摸板。支持I2C,几乎可以用任何微控 制器连接。可以使用ADDR引脚选择4个地址中的一个,一个I2C2线总线上共有48 个电容触摸板。使用该芯片比使用模拟输入进行…

Tcpdump -r 解析pcap文件

当我们使用命令抓包后&#xff0c;想在命令行直接读取筛选怎么办&#xff1f;-r参数就支持了这个 当你使用 tcpdump 的 -r 选项读取一个之前捕获的数据包文件&#xff0c;并想要筛选指定 IP 地址和端口的包时&#xff0c;你可以在命令中直接加入过滤表达式。这些过滤表达式可以…