数据量大且形式错综复杂的弦图,似乎除了炫酷,也并没有利于我们理解数据。

很多人就是因为这一点,对弦图望而却步。

但是,你知道吗?只要你理解了弦图,你就能体会到弦图在数据表达上的“平易近人”。

弦图也分中外

弦图的历史源远流长,我国古代数学家赵爽很早就运用了弦图,证明了勾股定理。

赵爽弦图

但是我们今天的主角不是那个“弦图”,而是图表家族的一个漂亮而复杂的小家伙——弦图(Chord Diagram)

弦图的名字来源于几何学,“弦”指的是端点在圆上的几何线段。在使用弦图进行数据可视化的过程中,数据围绕圆周径向布置,数据点之间的关系通常绘制为连接两个数据点的弧。

一条弦连接的两大学科

虽然弦图的名字与几何学密切相关,但最初开始使用弦图的却是生物学家。面对纷繁复杂的基因组数据,生物学家巧妙地利用弦图展示基因组之间的关系。

2017年,一批生物学家在《自然》上发表了一篇名为Scalable whole-genome single-cell library preparation without preamplification的文章。在文中,他们就运用弦图,展示了bulk-equivalent基因组与bulk基因组的断点连接重组情况。

灰色弧线代表了重叠连接的基因组合,橙色弧线代表了只在bulk-equivalent基因组产生连接概率大的组合,蓝色弧线代表了只在bulk基因组产生连接概率大的组合。

Scalable whole-genome single-cell library preparation without preamplification

为了探索人类基因的保守性,生物学家运用弦图,展示了狗的染色体与人类染色体上最相似的区域。生物学家先给人类染色体标记了颜色,再根据人类染色体,给与之相似的狗染色体标记了相同颜色。

我们很清晰地看到,狗染色体1的大片连续区域(图中右下角的部分)与人染色体6、9、18和19的区域具有高度相似性。

Exploring Genomic Conservation

揭开弦图的真面目

弦图的特点在于,它有助于我们看出数据之间的关系,适用于比较数据集或不同数据组之间的相似性(狗与人的染色体实验就是发现不同数据组的相似性)。连接两个数据点的弧线可以以颜色、弧线与圆的接触面积大小为不同的维度,表达不同的数值。

正因为弦图能在表达大量复杂数据的同时,尽可能把这种复杂的关系可视化,弦图被广泛运用到各个方面。

来自维也纳维特根斯坦人口中心和全球人力资本中心的地理研究人员,调查整理了从1990年到2010年的、来自150多个国家的人口流动,把静态人口普查转变为人口的动态流动。

我们可以看到,弧线与圆有接触的部分为A国流出人口,没有接触的部分为A国流入B国的人口,接触面积的大小则表示了人口的数量多少。

Where everyone in the world is migrating—in one gorgeous chart

以下是澎湃美数课运用弦图的一个案例,它以红蓝两色区分东西部球队,用红色弧线表示西部内的球队交易,用蓝色弧线表示东部内的球队交易,黑色的弧线则表示跨东西部的交易。弧线与圆的接触面积则表示在交易中两支球队交换的队员数量多少。

《图解NBA休赛期交易:强者西游,小球阵容依旧风靡》,澎湃新闻,2017年10月9日

弦图弦图,重在“弦”上!

无论是生物学家、地理学家还是媒体工作者,他们设计的弦图的丰富度主要体现在“弦”上。可以说,理解了“弦”的含义,你大概离“人弦合一”的境界不远了。

为了区分弦图在数据表达复杂程度上的不同,我们尝试把它分成几个“等级”:

1“入门级”

在单纯的数据关系展示上,弧线的意义就在于表达两个数据之间存在一定的关系。弧线与圆的接触面积和颜色没有数值的意义,它可以指示简单的关系(A-B)、具有位置信息(A-C)或单向关系(A-D)。

2“普通级”

你也可以在弧线与圆的接触面积上赋予数值的意义,表示两个数据之间的关系程度或者比例关系

3“高手级”

当弧线根据相关数据着色时,我们会更容易发现数据间的关系。值得注意的一点是,弧线可以根据源数据或目标数据着色

例如下图,同样是展示A与B的关系,但弧线的颜色可以由A决定,也可以由B决定。回想一下描述狗和人染色体相似性的弦图,弦的颜色也是遵循了这个法则。

4“殿堂级”

有的弧线与表示比例关系的弧线非常相似,也是两端粗细不同,却是两个数据的集合表现

下左图表现的是(A,B)的值为2,(B,A)的值为10,分别由两条粗细不一的弧线表示。下右图则将两个数值结合起来,根据弧线与圆接触面积的大小,表达不同的数值。C则表达了两倍的数值。

5“神话级”

更进一步,我们可以通过设计弧线是否接触到圆,区分数据类别。还记得人口流动的弦图吗?弧线接触到圆的面积则是流出人口,相反则是流入人口。下图中,弧线与圆相触的为数据的行,相反则为列。

弦图制作工具:dycharts.com

看似“冰山美人”的弦图竟如此平易近人!相关推荐

  1. P3196 [HNOI2008]神奇的国度(弦图的最小染色问题)

    整理的算法模板合集: ACM模板 题目传送门 K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国 ...

  2. 图论:弦图最小点染色

    弦图的定义:当图中任意长度大于3的环都至少有一个弦时, 一个无向图称为弦图 不存在四角.五角等关系就说明这个图是一个弦图 题目问的是,任何一对相互认识的人不可以组一队,问最多可以组多少对 所有的人构成 ...

  3. 【PKUSC2019】线弦图【计数】【树形DP】【分治FFT】

    Description 定义线图为把无向图的边变成点,新图中点与点之间右边当且仅当它们对应的边在原图中有公共点,这样得到的图. 定义弦图为不存在一个长度大于3的纯环,纯环的定义是在环上任取两个不相邻的 ...

  4. 图论 —— 弦图 —— LexBFS 算法

    [概述] LexBFS 是字典序广度优先搜索(Lexicographic BFS),其常用于弦图的判定. 每次按从 n 到 1 的顺序依次给点编号,每个点维护一个 list,用于记录与其相邻的已标号点 ...

  5. BZOJ 1006 神奇的国度(弦图的染色数)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1006 题意:给定一个弦图,求最小染色数.就是用最小数目的颜色进行染色使得任意两个相邻的节 ...

  6. ZOJ 1015 弦图判定

    一些定义: 弦图是一种特殊图:它的所有极小环都只有3个顶点. 单纯点:该顶点与其邻接点在原图中的导出子图是一个完全图. 图G的完美消去序列:一个顶点序列a1a2a3...an,使得对于每个元素ai,a ...

  7. 弦图与完美消除序列(bzoj 1006: [HNOI2008]神奇的国度)

    诱导子图:子图中任意一条边的两个端点一定也都在这个子图中 最大团:团中任意两点之间一定都有边,而包含顶点最多的团就是最大团 最小团覆盖:用最少的团覆盖图中所有的点 最大独立集:独立集中任意两点之间一定 ...

  8. 利用python绘制勾股定理赵爽弦图

    赵爽弦图是数学中的一个经典图形,绘制赵爽图弦用到2个python自带库turtle和math. 问题难点 画笔角是近似值,海归方向变换 解决方案 引入math库反三角函数,熟练掌握turtle库函数 ...

  9. MATLAB | 全网唯一! 又双叒叕一种弦图绘制

    前几天有粉丝问我这种图能不能画: 大体看了一下就是有联系的两个元素之间连线,同时将不同类用不同颜色划分,于是又双叒叕了一个工具函数: 绘制效果 教程部分 基础使用 输入数据要求一个nxn大小的0-1矩 ...

最新文章

  1. 并发、并行、串行、同步、异步、阻塞、非阻塞
  2. 奥鹏数据库应用系统设计下列关于php_[南开大学(本部)]《数据库应用系统设计》20春期末考核(参考答案)...
  3. swool tcp mysql_swoole/mysql(异步)
  4. JAVA正则表达式分析爬虫数据
  5. 在什么情况下自己应该辞职走人了,而不是等领导下“逐客令”?
  6. java逐行读取文件内容执行sql语句_[11/100] 文件和异常
  7. leetcode—22.二分查找题目leetcode总结
  8. Google 中国招聘啦
  9. [工具] Seer 代码预览器
  10. java电子书下载网站
  11. Java面向对象编程——什么是面向对象
  12. 强化学习RL——多臂老虎机问题
  13. 利用Android Studio手动创建活动——笔记(超多图)
  14. java项目有个x_GitHub - somnl/X-SpringBoot: X-SpringBoot是一个轻量级的Java快速开发平台,能快速开发项目并交付【接私活利器】...
  15. ps cs6调油画效果教程
  16. matlab 圣诞树,搞气氛!用MATLAB画一棵Bling Bling的圣诞树
  17. 记渣渣烟和专车司机的一次聊天
  18. MySQL 内核原理分析(一)
  19. 毕业设计-ssm-气象雷达
  20. IllegalStateException: Failure saving state: active Fragment has cleared

热门文章

  1. 为什么总有一些程序员,持续陷入焦虑、无法幸福?
  2. HTML5实现动态时钟
  3. 三位一撇:处理数字12345.67——12,345.67
  4. Excel | 替换特定大小的单元格值(如:小于5000的值)为指定值
  5. 五子棋的彩蛋——背景音效
  6. 一回来又恢复了往日的无聊生活
  7. Harmonious Attention Network for Person Re-Identification
  8. Xamarin for android 小白教程-HelloWorld !
  9. 基于Python的冬奥会领域问答机器人设计
  10. 实现连续签到案例的可能(使用)