和弦图

和弦图的简介

和弦图(chord Diagram),是一种显示矩阵中数据间相互关系的可视化方法,节点数据沿圆周径向排列,节点之间使用带权重(有宽度)的弧线链接

和弦图的构成

图表类型 和弦图
适合的数据 节点数据集(可选),边数据集
功能 观察节点关系
数据与图形的映射 权重映射到节点和边的宽度
适合的数据条数 节点数据两组以上

和弦图的应用场景

和弦图用于探索实体组之间的关系。 它们被生物科学界广泛用于可视化基因数据,在Wired,New York Times和American Scientist等刊物上也被称为信息图表(info graphics)。其他应用场景如下:

例子1:展示层次结构中的依赖关系 例如在软件类层次结构中的类存在复杂的依赖关系,根据源和目标包进行分组,然后根据依赖的程度使用带宽度的边连接具有依赖关系的节点,下图每个节点表示一个独立的包,每条边展示了包与包之间的依赖关系,每个节点上边的数量展示了当前包依赖的目标包的数量,边的初始宽度展示了当前包的类依赖目标包的类的数量,边的结束宽度展示了目标包的类依赖当前包的类的数量,也就是说,当一条边的结束宽度不为0时,表示包之间有循环依赖,在图表中表现为节点上连接了颜色与节点不同的边,例如图中左下角的vis.data与vis.event。数据来源:d3

$.getJSON('./data/relationshipHasWeight.json', function(data) { var Stat = G2.Stat;// 统计算法对象 var Layout = G2.Layout;// 布局算法对像 var nodes = data.nodes; // 节点数据 var links = data.links; // 边数据 var chart = new G2.Chart({ id: 'c1', forceFit: true, height: 500, animate: false, plotCfg: { margin: [70,0,60,0] } }); chart.tooltip({ title: null }); // 线性布局 var layout = new Layout.Linear({ nodes: nodes, hasWeight: true, // 带权重的布局 margin: 0.004 // 节点边距 }); nodes = layout.getNodes(); // 获取布局后的节点数据 // 创建边的视图 var edgeView = chart.createView(); edgeView.source(links); edgeView.coord('polar').reflect('y'); // 使用极坐标,反转y轴(布局方法默认给y赋值为0) edgeView.axis(false); chart.legend(false); // 由于边的坐标数据较多,此处使用统计函数简化语法,Stat.link计算布局后的边的坐标,放在..x和..y中,数值范围是 0-1 edgeView.edge() .position(Stat.link.weight('source*target*sourceWeight*targetWeight',nodes)) .shape('arc') // 使用弧线完成边的绘制 .color('source') .opacity(0.5) .tooltip('sourceWeight*targetWeight'); // 创建节点视图 var nodeView = chart.createView(); nodeView.coord('polar').reflect('y'); nodeView.axis(false); nodeView.source(nodes); nodeView.point() .position('x*y') // nodes数据的x、y由layout方法计算得出 .color('id') .size('width*height',function(width,height){ //将布局算法计算得出的节点宽高映射到size上 return [width,height]; }) .shape('rect').style({ stroke:"#ccc" // 节点边框 }) .tooltip('name*value') .label('name',{ labelEmit: true, fontSize:12 }); chart.render(); });

例2: 展示同级实体之间的流通关系 下图展示了某个时段用户使用uber软件在美国旧金山各个城市之间乘车交通的情况,图中的节点表示城市,节点大小表示了交通流量的多少,从图中可以看出,交通行为主要发生在SoMa、Downtown、Financial District、Mission、Marina和Western Addition六个城市。边连接了有交通行为的两个城市,节点上边的条数表示与当前城市有交通行为的城市的数量,边的初始宽度表示从当前城市到目标城市的流通量,边的结束宽度表示从目标城市到当前城市的流通量,从图中可以看出,从 SoMa到Financial District的流量最大,数据来源:uberdata

标签