用Pyecharts绘制网络关系图

2020-03-31  本文已影响0人  askka
airports-world-network
题图引自flowingdata.com: air-transportation-network/

对照pyecharts文档照猫画虎,绘制了一个文本引用关系的关系图。

数据格式

按照说明文档,关系图需要的数据包括:GraphNode(节点数据项)、GraphLink(节点间的关系数据)和GraphCategory(节点分类类目),如下图。


GraphNode是各个节点基本参数。其中'name''value'是默认的浮动显示数据。'x''y'是不指定布局方式layout时才必需,'symbolSize''category'则可进一步描述节点数据的其它属性,比如用不同颜色来分门别类表示不同的'category',节点的大小则由'symbolSize'决定,类似题图中用节点的大小描述各个机场的繁忙程度。
nodes
GraphLink相对简单,[{'source': x , 'target': y}]描述关系数据的起止节点。
GraphCategory是节点类别的列表[{'name': '类目0'}],也可指定各类节点的图标、尺寸等。

pyecharts中的示例如下所示:
Pyecharts Graph: Les Miserables

几个值得一提的设置

'symbol''edge_symbol'

我自己绘制的关系图如下。试了下'symbol'参数指定节点图形;以及将节点连线指定为由'source'指向'target'的有向图形式。

GraphNode数据的'id''name'

发现当GraphNode数据中存在'id'属性时,GraphLink中[{'source': id_x , 'target': id_y}]必须与GraphNode的id相对应(参见上图Pyecharts Graph: Les Miserables),而不是与'name'对应。
links中的数据为[{'id': '0', 'source': '1', 'target': '0'}…]
我倒是觉得这种形式的描述并不直观,不如直接[{ 'source': 'Napoleon', 'target': 'Myriel'}…]看得更明白。
实际上GraphNode和GraphLink并不需要'id'属性,可以直接省去也不妨事。

layout布局

'x''y'只在layout = 'none' 时才生效!
GraphNode的数据类型

一开始严格按照说明文档示例 'id' = '0',读取csv文件时加了一句 dtype=object 来指定'id'为字符串'0'而不是数字0,后来发现其实这里的数据类型对绘制关系图并无影响,类似的,节点中写成了'symbolSize': '9.4 '也不影响。
不过如前所述,其实并不需要'id'属性。

参考资料
  1. Pyecharts: 关系图Graph
  2. Pyecharts 基本图表:关系图
  3. flowingdata.com: air-transportation-network
上一篇下一篇

猜你喜欢

热点阅读