一、背景
女朋友有一天提出了奇怪的要求,让我给她整一张中国主要城市的交互式网络图,我都给忘记了,可是她却记着呢,这就来问我要啦
来嘛,我这就整起:使用Python创建交互式网络图
二、步骤
准备使用pyvis库来制作,先安装
pip install pyvis
生成城市列表
准备了一个城市字符串,split即可得到城市列表
# 生成城市列表
city_str = "上海 北京 深圳 重庆 广州 成都 天津 武汉 东莞 西安 杭州 佛山 南京 沈阳 青岛 济南 长沙 哈尔滨 郑州 昆明 大连 南宁 石家庄 厦门 太原 苏州"
city_list = city_str.split()
print(city_list)
运行结果:
生成随机颜色列表
准备一个颜色字符串,先split,再random.choice给每个城市随机分配颜色
# 生成随机颜色列表
color_str = "lightgreen yellow lightblue green red gold orange olive darkgreen springgreen yellowgreen darkcyan blue " \
"darkblue lightslateblue mediumpurple cornflowerblue deepskyblue lightcyan lightskyblue "
color_list = [random.choice(color_str.split()) for i in city_list]
print(color_list)
运行结果:
生成网络图
添加节点
需要导入Network,实例化后再添加节点
from pyvis.network import Network
# 生成网络图
nw = Network(notebook=True)
nw.add_nodes(city_list, color=color_list) # 添加节点
nw.show('city_diagram.html') # 保存为html:在浏览器中打开
运行效果:
添加关系线
先生成随机城市连线,再添加关系线
add_edges的参数示例:[(‘北京’,‘上海’),(‘成都’,‘重庆’),(‘苏州’,‘杭州’)]
# 生成网络图
nw = Network(notebook=True)
nw.add_nodes(city_list, color=color_list) # 添加节点
# 生成随机城市连线
edge_list = [(random.choice(city_list), random.choice(city_list)) for i in range(len(city_list))]
nw.add_edges(edge_list)
nw.show('city_diagram.html') # 保存为html:在浏览器中打开
运行效果:
三、总结
1.简单几行代码就生成了可供交互的网络图
2.网络图的节点和关系线的样式、颜色等均可自定义,参数参考官网
3.网络图目前只在本机展示,未在其他电脑上测试