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

从DataFrame生成NetworkX图后,如何设置S1-S4节点标签?

问题:为NetworkX有向图设置节点标签(S1-S4)

尝试用以下代码从DataFrame生成NetworkX有向图,但生成的图未显示节点名称,使用relabel_nodes方法也没成功:

import pandas as pd
import numpy as np
import networkx as nx

data = [[0,0,0,1], [1,0,0,1], [1,0,0,1], [0,0,0,0]]
df = pd.DataFrame(data, columns=['S1', 'S2', 'S3', 'S4'])
df.index = ['S1', 'S2', 'S3', 'S4']

# 原创建图的代码,节点为0-3的整数
G = nx.DiGraph(df.values, with_labels=True)
nx.draw(G)

# 尝试重命名节点但未成功显示标签
G = nx.relabel_nodes(G, dict(enumerate(df.columns)))
nx.draw(G)

解决方案

方法1:直接从DataFrame邻接矩阵创建带节点名的图

NetworkX提供了from_pandas_adjacency方法,可以直接基于DataFrame的索引和列名创建节点,无需手动重命名:

import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

data = [[0,0,0,1], [1,0,0,1], [1,0,0,1], [0,0,0,0]]
df = pd.DataFrame(data, columns=['S1', 'S2', 'S3', 'S4'])
df.index = ['S1', 'S2', 'S3', 'S4']

# 直接用DataFrame创建有向图,节点自动使用df的索引/列名
G = nx.from_pandas_adjacency(df, create_using=nx.DiGraph)

# 绘图时开启with_labels=True显示节点标签
nx.draw(G, with_labels=True, node_size=1500, font_size=12)
plt.show()

方法2:修复原代码的节点重命名与绘图逻辑

原代码的问题在于:

  • nx.DiGraph(df.values)会生成节点为0-3的整数图,构造函数的with_labels=True参数无效(该参数属于nx.draw)
  • 重命名节点后,绘图时未开启with_labels=True,导致标签不显示

修改后的代码:

import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

data = [[0,0,0,1], [1,0,0,1], [1,0,0,1], [0,0,0,0]]
df = pd.DataFrame(data, columns=['S1', 'S2', 'S3', 'S4'])
df.index = ['S1', 'S2', 'S3', 'S4']

# 从邻接矩阵创建图(节点初始为0-3)
G = nx.DiGraph(df.values)
# 重命名节点为S1-S4
G = nx.relabel_nodes(G, dict(enumerate(df.columns)))

# 绘图时必须设置with_labels=True才会显示节点标签
nx.draw(G, with_labels=True, node_size=1500, font_size=12)
plt.show()

关键说明

  • nx.draw的with_labels=True是显示节点标签的核心参数,构造图时的with_labels参数无效
  • 使用from_pandas_adjacency是最简洁的方式,直接复用DataFrame的索引/列作为节点名,无需额外重命名操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:45:13