「什么时候用弦图」
Chord Diagram主要是用来表示多个节点之间的关系,假设我们要表示5个节点之间的关系,那么输入的矩阵是下面这个样子,且必须是方阵。节点A的长度是元素A所在行的总和,就是(A, A)、(A, B)、(A, C)、(A, D)、(A, E)的和。图中C与D之间的弦表示C和D相关,与C相接的弧长实际上是(C, D)的值。
「绘制弦图」
导入初始数据
|
|
布局(转换数据)
|
|
padding(0.03)表示弧与弧之间的间隔,population是之前输入的人口数据。经过布局之后会生成两块,一块是groups,表示节点;另一块是chords,表示弦(连线),chords里面还会分source与target,表示连线的两端。
绘制画布SVG
|
|
先创建一个SVG
元素,里面添加一个g
元素同时设置平移属性(用来确定弦图的中心)。然后再在g
元素添加2个g
元素,分别用来装节点与弦,结构如下所示:
<svg>
--<g>
----<g>``</g>
----<g>``</g>
--</g>
</svg>
绘制节点(弧)
|
|
在标记文字的地方要注意:
- each():表示对任何一个绑定数据的元素,都执行后面的无名函数 function(d,i) ,计算文字的角度与内容
- transform():不仅需要考虑文字的旋转角度与平移距离,还要考虑如果文字在下方是会是倒写的情况。
生成如下图:
绘制连线(弦)
|
|
这样就生成了首页的弦图,但是当数据多了之后,会看不清节点与节点之间的关系,我们可以添加一些交互式的操作解决。如当鼠标移到该节点,只会显示与该节点相接的弦,其他的会被隐藏。这里我们定义一个fade函数,并在节点(弧)上通过mouseover
与mouseout
添加动作
效果如图:
「源代码」
|
|