超全面!和弦图(Chord diagram) 的绘制方法汇总~~

今天这篇推文给大家介绍一下和弦图(Chord diagram) 的绘制方法,具体包括的内容如下:

  • 和弦图(Chord diagram)简介

  • 和弦图(Chord diagram)绘制方法(R+Python)

  • 更多详细的数据可视化教程,可订阅我们的店铺课程:

和弦图(Chord diagram)简介

和弦图(chord Diagram),是一种显示矩阵中数据间相互关系的可视化方法,节点数据沿圆周径向排列,节点之间使用带权重(有宽度)的弧线链接。其适合节点数据集或边数据集,功能为观察数据节点之间的关系。此类图主要将数据权重映射到节点和边的宽度,适合多组数据进行绘制。和弦图的结构大致如下:

和弦图结构(图片来源于网络,侵删)

下面就具体介绍下风别使用R和Python进行和弦图(chord Diagram)的绘制。

和弦图(Chord diagram)绘制方法(R+Python)

R绘制方法

R语言绘制和弦图(Chord diagram) 最方便的第三方包为circlize包,由于这个包功能太过丰富,原作者特意将使用方法汇编成册供大家参考学习,网址如下:https://jokergoo.github.io/circlize_book/book/ 。这里我们就列举几个优秀样例供大家参考,具体内容及详细使用方法,大家可参考上述网址。

「样例一:」

代码:

# Libraries
library(tidyverse)
library(viridis)
library(patchwork)
library(hrbrthemes)
library(circlize)
library(chorddiag) data <- read.table("13_AdjacencyDirectedWeighted.csv", header=TRUE)colnames(data) <- c("Africa", "East Asia", "Europe", "Latin Ame.",   "North Ame.",   "Oceania", "South Asia", "South East Asia", "Soviet Union", "West.Asia")
rownames(data) <- colnames(data)
# 保存图片,注意:这里没有使用ggsave()保存
png(filename = "G:\\DataCharm\\可视化包介绍(绘制)\\和弦图\\Chord diagram.png",units="in",width = 8,height = 6,res = 600)#数据处理
data_long <- data %>%rownames_to_column %>%gather(key = 'key', value = 'value', -rowname)# 和弦图 参数设置
circos.clear()
circos.par(start.degree = 90, gap.degree = 4, track.margin = c(-0.1, 0.1), points.overflow.warning = FALSE)#设置图片位置(四周边距)
opar <- par(mar=c(0,0,0,0), bg = "#3E4149")# 选择颜色
mycolor <- viridis(10, alpha = 1, begin = 0, end = 1, option = "C")
mycolor <- mycolor[sample(1:10)]# circlize 包的基础设置
chordDiagram(x = data_long, grid.col = mycolor,transparency = 0.25,directional = 1,direction.type = c("arrows", "diffHeight"), diffHeight  = -0.04,annotationTrack = "grid", annotationTrackHeight = c(0.05, 0.1),link.arr.type = "big.arrow", link.sort = TRUE, link.largest.ontop = TRUE)# 添加文本和刻度轴
circos.trackPlotRegion(track.index = 1, bg.border = NA, panel.fun = function(x, y) {xlim = get.cell.meta.data("xlim")sector.index = get.cell.meta.data("sector.index")# 文本circos.text(x = mean(xlim), y = 3.2, labels = sector.index, facing = "bending", cex = 0.8)# 刻度circos.axis(h = "top", major.at = seq(from = 0, to = xlim[2], by = ifelse(test = xlim[2]>10, yes = 2, no = 1)), minor.ticks = 1, major.tick.length = 0.5,labels.niceFacing = FALSE)}
)
par(opar)
dev.off()

可视化结果如下:

Sample01

「样例二:」

代码:

#img_url:http://www.thegreenhead.com/imgs/keith-haring-double-retrospect-worlds-largest-jigsaw-puzzle-2.jpgload(system.file("extdata", "doodle.RData", package = "circlize"))
circos.par("cell.padding" = c(0, 0, 0, 0))
circos.initialize(letters[1:16], xlim = c(0, 1))
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {img = img_list[[CELL_META$sector.numeric.index]]circos.raster(img, CELL_META$xcenter, CELL_META$ycenter, width = CELL_META$xrange, height = CELL_META$yrange, facing = "bending.inside")
}, track.height = 0.25, bg.border = NA)
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {img = img_list[[CELL_META$sector.numeric.index + 16]]circos.raster(img, CELL_META$xcenter, CELL_META$ycenter, width = CELL_META$xrange, height = CELL_META$yrange, facing = "bending.inside")
}, track.height = 0.25, bg.border = NA)
circos.clear()

结果如下:

Sample_02

Python绘制方法

Python 绘制和弦图(Chord diagram) 则不像R那样绘制方便,但也存在一些优秀的第三方包用于绘制。接下来我就列举一下:

  1. matplotlib-chord-diagram

Github(https://github.com/fengwangPhysics/matplotlib-chord-diagram) 上的一个优秀的基于matplotlib绘制和弦图的方法,已定义成绘图函数(完全基于Matplotlib,代码行数较多),绘制的结果如下:

matplotlib-chord-diagram

  1. Python-chord库

除了定义好的绘图函数外,Python 当然也存在优秀的第三方库 进行绘制,chord库(https://github.com/shahinrostami/chord) 就是其中一个,该库作者不仅维护chord库,更推出收费的Chord PRO,当然,一般的绘图需求chord库就可以完成,但如果你需求较为繁琐,可以考虑付费的Chord PRO版本,两个库绘制的结果都是交互式的哦!接下来我们就列举几个chord库的样例用于展示:

样例:

由于高度集成化,chord库绘制和弦图的代码也比较简洁,如下:

from chord import Chord
#样例数据:
matrix = [[0, 5, 6, 4, 7, 4],[5, 0, 5, 4, 6, 5],[6, 5, 0, 4, 5, 5],[4, 4, 4, 0, 5, 5],[7, 6, 5, 5, 0, 4],[4, 5, 5, 5, 4, 0],
]names = ["Action", "Adventure", "Comedy", "Drama", "Fantasy", "Thriller"]
# 可视化绘制
Chord(matrix, names).show()

结果如下:

Chord Example01

当然,你还可以自定义颜色:

hex_colours = ["#222222", "#333333", "#4c4c4c", "#666666", "#848484", "#9a9a9a"]Chord(matrix, names, colors=hex_colours).show()

Change color

在定制化操作上,免费的Chord 和付费的Chord Pro 主要有以下不同:

「Chord(free)」:

Chord(self,matrix,names,colors="d3.schemeSet1",opacity=0.8,padding=0.01,width=700,label_color="#454545",wrap_labels=False,margin=0,credit=False,font_size="16px",font_size_large="20px"      )

「Chord Pro」:

Chord(self,matrix,names,colors="d3.schemeSet1",opacity=0.8,padding=0.01,width=700,label_color="#454545",wrap_labels=False,margin=0,credit=False,font_size="16px",font_size_large="20px",details=[],details_thumbs=[],thumbs_width=85,thumbs_margin=5,thumbs_font_size=14,popup_width=350,noun="instances",details_separator=", ",divide=False,divide_idx=0,divide_size=0.5,instances=0,verb="occur together in",symmetric=True,title="",arc_numbers=False,divide_left_label="",divide_right_label="",inner_radius_scale=0.39,outer_radius_scale=1.1,allow_download=False,        )

可以看的出来,付费的Chord Pro在定制化绘制方面要灵活的多。此外,该库的作者还有许多优秀的资源分享,更多信息可查看上述的网址。

  1. Bokeh、Plotly库

既然提到了交互式的Python可视化库,和弦图还可以使用Bokeh、Plotly等库进行绘制,更多详细内容,小伙伴们可自行搜索哈。

总结

本篇推文介绍了和弦图(Chord diagram)RPython绘制方法,得益于优秀的开发者,两者在制作方法都有对应的三方库或者函数,但也可以看出,R在可视化绘制方法还是比Python要灵活的多,且直接对应的第三方包也相对较多,总之还是一句话,绘图工具千千万,适合自己的才是最好的。

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

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

相关文章

5.11 Vue配置Element UI框架

Vue配置Element UI框架 目录一、 概要二、 开发前准备1. 搭建Vue框架 三、 安装 Element UI1. 引入 Element UI 依赖2. 在 mian.js 中引入 Element UI 和相关样式&#xff1a;3. 按需引入(非必须, 可忽略)4. 简单构建一个主页面 目录 一、 概要 Element UI 是一个基于 Vue.js …

Java学习记录第十三天

面向对象编程 核心思想就是OOP&#xff08;面向对象编程&#xff09; 面向过程&面向对象 面向过程思想 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么... 面对过程适合处理一些较为简单的问题 面向对象思想 物以类聚&#xff0c;分类的思维模式&…

基于Java在线考试系统系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

WebGIS概述

1.地图组成 底图(Map): 所有信息的载体 图层(Layer):将不同地理信息分类形成的一个集合 要素(Feature):表示不同的地物 几何(Geometry): 信息的数据模型和抽象 2.地图容器Container 即在准备阶段所创建的指定了id的div对象&#xff0c;这个div将作为承载所有图层、点标记、矢量…

常用类(String)

目录 字符串相关的类1.1、String类的概述1.2、理解String的不可变性1.3、String不同实例化方式的对比1.4、String不同拼接操作的对比1.4.1、String使用陷阱 1.5、String的常用方法1.6、String与基本数据类型、包装类、char[]、byte[]的转换1.7、StringBuffer和StringBuilder的介…

EasyBoss ERP上线实时数据大屏,Shopee本土店铺数据实时监测

近日&#xff0c;灵隐寺PPT汇报用上数据大屏疯狂刷屏&#xff0c;有做东南亚本土电商的老板发现这种数据大屏的模式可以很好地展现店铺运营状况。 所以就有老板来问&#xff1a;EasyBoss能不能也上线实时数据大屏的功能&#xff1f;没问题&#xff01;立马安排&#xff01; 要有…

鸿蒙OS开发实例:【应用级别文件浏览器】

介绍 HarmonyOS的沙盒机制完全屏蔽了应用对手机公共存储空间的访问&#xff0c;安全性提高已不言而喻。 本篇文章的主要目的是为了能通过一个简单工具&#xff0c;可视化的让一个新手能相对轻松的学习文件&数据存储。HarmonyOS 应用开发工具DevEco Studio也没有提供读取存…

.NET CORE 分布式事务(二) DTM实现TCC

目录 引言&#xff1a; 1. TCC事务模式 2. TCC组成 3. TCC执行流程 3.1 TCC正常执行流程 3.2 TCC失败回滚 4. Confirm/Cancel操作异常 5. TCC 设计原则 5.1 TCC如何做到更好的一致性 5.2 为什么只适合短事务 6. 嵌套的TCC 7. .NET CORE结合DTM实现TCC分布式事务 …

【Linux多线程】线程的同步与互斥

【Linux多线程】线程的同步与互斥 目录 【Linux多线程】线程的同步与互斥分离线程Linux线程互斥进程线程间的互斥相关背景概念问题产生的原因&#xff1a; 互斥量mutex互斥量的接口互斥量实现原理探究对锁进行封装(C11lockguard锁) 可重入VS线程安全概念常见的线程不安全的情况…

查询优化-提升子查询-UNION类型

瀚高数据库 目录 文档用途 详细信息 文档用途 剖析UNION类型子查询提升的条件和过程 详细信息 注&#xff1a;图片较大&#xff0c;可在浏览器新标签页打开。 SQL: SELECT * FROM score sc, LATERAL(SELECT * FROM student WHERE sno 1 UNION ALL SELECT * FROM student…

halcon例程学习——ball.hdev

dev_update_window (off) dev_close_window () dev_open_window (0, 0, 728, 512, black, WindowID) read_image (Bond, die/die_03) dev_display (Bond) set_display_font (WindowID, 14, mono, true, false) *自带的 提示继续 disp_continue_message (WindowID, black, true)…

Redis桌面客户端

3.4.Redis桌面客户端 安装完成Redis&#xff0c;我们就可以操作Redis&#xff0c;实现数据的CRUD了。这需要用到Redis客户端&#xff0c;包括&#xff1a; 命令行客户端图形化桌面客户端编程客户端 3.4.1.Redis命令行客户端 Redis安装完成后就自带了命令行客户端&#xff1…

MySQL Innodb 引擎中预防 Update 操作上升为表锁

一、MySQL 如何预防 Update 上升为表锁 在 MySQL 中&#xff0c;进行任何数据的 修改 操作都会进行一定的锁操作&#xff0c;而锁的不同直接导致性能的差异。例如 MyISAM 引擎&#xff0c;更新时采用表锁&#xff0c;并发性较差。而 Innodb 引擎支持事务&#xff0c;更新时采用…

关于RPC

初识RPC RPC VS REST HTTP Dubbo Dubbo 特性&#xff1a; 基于接口动态代理的远程方法调用 Dubbo对开发者屏蔽了底层的调用细节&#xff0c;在实际代码中调用远程服务就像调用一个本地接口类一样方便。这个功能和Fegin很类似&#xff0c;但是Dubbo用起来比Fegin还要简单很多&a…

C++超市商品管理系统

一、简要介绍 1.本项目为面向对象程序设计的大作业&#xff0c;基于Qt creator进行开发&#xff0c;Qt框架版本6.4.1&#xff0c;编译环境MINGW 11.2.0。 2.项目结构简介&#xff1a;关于系统逻辑部分的代码的头文件在head文件夹中&#xff0c;源文件在s文件夹中。与图形界面…

新电脑如何给C盘扩容?怎么分盘?搞定

如何给C盘扩容&#xff1f;怎么分盘&#xff1f;搞定 马上到了升学考试季了&#xff0c;好多小伙伴们结束完毕后都开始为自己后续的学习生涯制备装备了&#xff0c;新手机&#xff0c;新电脑等等。但是有一个问题就是大多数人都只考虑电脑的配置&#xff0c;而忽略了实际使用的…

Ubuntu20.04上,VTK9.3在QT5上的环境配置与开发测试

Ubuntu20.04上&#xff0c;VTK9.3在QT5上的环境配置与开发测试 1 背景介绍2 VTK9.3的编译安装2.1 安装ccmake 和 VTK 的依赖项&#xff1a;2.2 建立VTK编译文件夹并下载2.3 cmake配置VTK9.3的编译环境2.4 make编译安装VTK9.32.5 测试VTK安装是否成功 3 基于qmake的QT5的VTK9.3开…

鸿蒙实战开发-使用常用组件与布局实现登录、首页、我的三个页面

介绍 HarmonyOS ArkUI提供了丰富多样的UI组件&#xff0c;您可以使用这些组件轻松地编写出更加丰富、漂亮的界面。在本篇Codelab中&#xff0c;您将通过一个简单的购物社交应用示例&#xff0c;学习如何使用常用的基础组件和容器组件。 本示例主要包含&#xff1a;“登录”、…

系统开发实训小组作业week5 —— 用例描述与分析

目录 4.3 UC003电影浏览与查询 4.3.1 用例描述 4.3.2 活动图 4.3.3 界面元素 4.3.4 功能 4.4 UC004在线订票 4.4.1 用例描述 4.4.2 活动图 4.4.3 界面元素 4.4.4 功能 4.3 UC003电影浏览与查询 4.3.1 用例描述 用例号 UC003-01 用例名称 电影浏览与查询 用例描述…