You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyvis与Networkx:如何按来源/目标或类型为节点设置不同颜色

解决PyVis节点颜色不生效及按type属性定义颜色问题

问题说明

你编写的代码试图通过NetworkX设置节点颜色,但生成的PyVis HTML页面中节点未变色。当前需求分两步:

  1. 先实现Team节点显示红色、State节点显示黑色
  2. 最终根据CSV中的type属性定义Team节点颜色(nfl=红色,nba=黑色,mlb=绿色)

源CSV文件

team,state,Weight,type
Knicks,New York,9,nba
Warriors,California,9,nba
Giants,California,3,mlb
49ers,California,6,nfl
Cowboys,Texas,1,nfl
Giants,New York,2,nfl

原始代码问题点

你的代码中nx.draw(G, node_color=colors)是给Matplotlib绘图设置颜色,而PyVis的net.from_nx(G)不会继承NetworkX的这个颜色配置,必须给NetworkX节点添加color属性才能被PyVis识别。


解决方案一:实现Team/State节点区分颜色

修改代码,直接给NetworkX的节点添加color属性,PyVis导入时会自动应用该属性:

import networkx as nx
import pandas as pd
from pyvis.network import Network

df = pd.read_csv('./data_files/sample.csv')

# 创建图
G = nx.from_pandas_edgelist(df,
                            source='team',
                            target='state',
                            edge_attr='Weight')

# 给节点添加color属性
team_nodes = set(df["team"].values)
for node in G.nodes:
    if node in team_nodes:
        G.nodes[node]['color'] = "red"
    else:
        G.nodes[node]['color'] = "black"

# 初始化PyVis网络并导入图
net = Network(notebook=True, filter_menu=True, cdn_resources='remote')
net.from_nx(G)
net.show("./output/teams.html")

解决方案二:按type属性定义Team节点颜色

注意:同一个Team可能对应多个type(如Giants同时属于mlb和nfl),以下代码取每个Team第一次出现的type来映射颜色,你可根据需求调整规则(如取出现次数最多的type):

import networkx as nx
import pandas as pd
from pyvis.network import Network

df = pd.read_csv('./data_files/sample.csv')

# 创建type到颜色的映射
type_color_map = {
    'nfl': 'red',
    'nba': 'black',
    'mlb': 'green'
}

# 生成每个Team对应的颜色(取第一次出现的type)
team_color_map = df.groupby('team')['type'].first().map(type_color_map).to_dict()

# 创建图
G = nx.from_pandas_edgelist(df,
                            source='team',
                            target='state',
                            edge_attr='Weight')

# 给节点设置颜色
team_nodes = set(df["team"].values)
for node in G.nodes:
    if node in team_nodes:
        # 用Team对应的type颜色
        G.nodes[node]['color'] = team_color_map[node]
    else:
        # State节点设为默认灰色,可自定义
        G.nodes[node]['color'] = "#888888"

# 生成可视化页面
net = Network(notebook=True, filter_menu=True, cdn_resources='remote')
net.from_nx(G)
net.show("./output/teams.html")

内容的提问来源于stack exchange,提问作者Evan Camila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:18:38