听说最近Pyment无法访问了,准备搞个镜像,去去就来。
不对啊,没开代理可以直接访问啊。。。
以下为原文内容:
——————————分割线——————————————
之前写过一个博客基于Python的多层网络可视化包Multinetx,也可以绘制多层网络,感兴趣的小伙伴可以翻看。
介绍
根据官方手册的介绍,pymnet 库可参考如下链接:
pymnet 库可以生成多层和多路复用网络的图像。 库中绘制网络图像的主要使用了 Matplotlib , 支持矢量格式(例如 pdf 或 svg)及光栅格式(例如 png)。 此外还可以使用 Javascript 和 d3.js 绘制网络图片,这样就可以使用浏览器查看这些交互式图形了。
安装
进入:https://bitbucket.org/bolozna/multilayer-networks-library/src/default/ 下载之后,解压,然后可以使用
python setup.py install
或者简单粗暴地直接 放入 python_path -> Lib -> site-packages 里面。注意:如果遇到 No model named pymmnet 这样的错误提示,请注意是否注释掉了默认的 sample 代码。
使用
新建 test.py, 粘贴如下示例代码:
from pymnet import *
fig=draw(er(10,3*[0.4]),layout="spring")
fig.savefig('test.pdf')
打开生成的 pdf, 效果如下:
看,是否似曾相似 对,就是 Kivela 的 Multilayer networks 综述[1]里的多层网络可视化效果,支持 aspect 的那种。
使用的时候,需要保存到本地pdf,如果按照官方提示给出的
from pymnet import *
net = models.er_multilayer(5,2,0.2)
fig = draw(net, show=True)
是看不出来结果的。并且控制台会提示:UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure. % get_backend()),该问题是因为这段代码默认是在命令行执行,没有可视化交互界面导致的,可在代码中添加如下内容:
import matplotlib
matplotlib.use('TkAgg')
即可以预览方式呈现。真实网络数据集可视化
这个可视化工具支持 邻接矩阵,以 bkfrat.dat 数据集为例,输入如下代码:
from pymnet import *
net = read_ucinet("bkfrat.dat", couplings="none")
net = transforms.threshold(net, 4)
fig = draw(net,
show=True,
layout="spring",
layerColorRule={},
defaultLayerColor="gray",
nodeLabelRule={},
edgeColorRule={"rule": "edgeweight",
"colormap": "jet", "scaleby": 0.1}
)
fig.savefig('bkfrat.pdf')
得到的结果如下:
————更新@2020-6-26 18:04:13————
感谢 xxxxxin 同学提醒自定义函数的用法,更新一下代码:
from pymnet import *
net = read_ucinet("bkfrat.dat", couplings="none")
net = transforms.threshold(net, 4)
fig = draw(
net,
show=True,
layout="spring",
layerColorRule={},
defaultLayerColor="gray",
nodeLabelRule={},
edgeColorRule={
"rule": "edgeweight",
"colormap": "jet",
"scaleby": 0.1,
'f':lambda x=net: func(x)
}
)
fig.savefig('bkfrat.pdf')
def func(x):
''' 自定义函数 '''
print('自定义函数的参数:',x)
return 1
这里面的**Rule参数里支持自定义函数,比如想统一修改边权值对应的colormap样式,可以设置某种计算,我这里都设置为1了,也就是边权值都更改为1,不区分颜色了,效果如图:
参考资料:
- Multilayer Networks. Mikko Kivela, Alexandre Arenas, Marc Barthelemy, James P. Gleeson, Yamir Moreno, Mason A. Porter, arXiv:1309.7233 [physics.soc-ph]
- Multilayer Networks Library for Python (Pymnet). http://www.mkivela.com/pymnet/index.html
- UCINET IV Datasets. http://vlado.fmf.uni-lj.si/pub/networks/data/ucinet/ucidata.htm#bkfrat