一、背景

女朋友有一天提出了奇怪的要求,让我给她整一张中国主要城市的交互式网络图,我都给忘记了,可是她却记着呢,这就来问我要啦

来嘛,我这就整起:使用Python创建交互式网络图

二、步骤

准备使用pyvis库来制作,先安装

pip install pyvis

生成城市列表

准备了一个城市字符串,split即可得到城市列表

# 生成城市列表
city_str = "上海 北京 深圳 重庆 广州 成都 天津 武汉 东莞 西安 杭州 佛山 南京 沈阳 青岛 济南 长沙 哈尔滨 郑州 昆明 大连 南宁 石家庄 厦门 太原 苏州"
city_list = city_str.split()
print(city_list)

运行结果:

Python创建交互式网络图_pyvis

生成随机颜色列表

准备一个颜色字符串,先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)

运行结果:

Python创建交互式网络图_Python_02

生成网络图

添加节点

需要导入Network,实例化后再添加节点

from pyvis.network import Network
# 生成网络图
nw = Network(notebook=True)
nw.add_nodes(city_list, color=color_list)  # 添加节点
nw.show('city_diagram.html')  # 保存为html:在浏览器中打开

运行效果:

Python创建交互式网络图_交互式网络图_03

添加关系线

先生成随机城市连线,再添加关系线

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:在浏览器中打开

运行效果:

Python创建交互式网络图_交互式网络图_04

三、总结

1.简单几行代码就生成了可供交互的网络图

2.网络图的节点和关系线的样式、颜色等均可自定义,参数参考官网

3.网络图目前只在本机展示,未在其他电脑上测试