如何使用pyvis绘制按社区标签为同组节点着色的网络图
pyvis完全支持按社区标签为节点着色的需求,你只需要为节点指定color属性即可,具体实现方法如下:
实现步骤
1. 准备社区映射与颜色映射
首先你需要将已得到的社区标签转换为「节点-颜色」的对应关系,示例如下:
# 假设你的社区标签结果是如下格式的字典:key为城市节点名,value为社区编号 community_labels = { "北京": 0, "上海": 0, "广州": 1, "深圳": 1, "成都": 2, "重庆": 2 } # 预定义不同社区对应的颜色,可根据你的社区总数调整数量 color_list = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEAA7", "#DDA0DD"] # 生成节点颜色映射 node_color_map = {node: color_list[label % len(color_list)] for node, label in community_labels.items()}
2. 为节点添加颜色属性(两种方案可选)
方案1:先给NetworkX图添加属性再导入pyvis
这是最简便的方案,pyvis会自动识别NetworkX节点的color属性:
import networkx as nx from pyvis.network import Network # G为你已经构建好的NetworkX图 for node in G.nodes: G.nodes[node]["color"] = node_color_map[node] # 后续流程和你原有的代码一致 net = Network(height='800px', width='800px', directed=False, notebook=True) net.from_nx(G) net.show("example.html")
方案2:直接修改pyvis生成后的节点属性
如果你已经执行了from_nx导入,也可以直接遍历pyvis的节点列表修改:
from pyvis.network import Network net = Network(height='800px', width='800px', directed=False, notebook=True) net.from_nx(G) # 遍历修改节点颜色 for node in net.nodes: # node["id"]对应你原始的城市节点名 node["color"] = node_color_map[node["id"]] net.show("example.html")
补充说明
- 如果你的社区数量超过预定义的颜色列表长度,代码里的
label % len(color_list)会自动循环复用颜色,你也可以根据需要扩展color_list的颜色值 - 除了纯色填充,你也可以给
color属性传字典实现更复杂的节点样式,比如{"border": "#2B2B2B", "background": "#FF6B6B", "highlight": {"border": "#000000", "background": "#FF8C8C"}},可自定义边框、hover高亮的颜色
内容的提问来源于stack exchange,提问作者user13056355
相关产品推荐
相关产品推荐

