首页 > 解决方案 > Networkx Graph 绘图节点权重

问题描述

我想为无向图中的每个节点分配节点权重。我使用以下 MWE:

import sys
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G.add_node(0)
G.add_node(1, weight=2)
G.add_node(2, weight=3)
nx.draw(G, with_labels=True)
plt.show()

然后我有以下形式的图: 在此处输入图像描述

我想绘制一个图表,权重在节点旁边以新颜色给出,例如: 在此处输入图像描述

实现这一点的最简单方法是什么?在 SO 上,材料主要用于边缘权重,或根据节点权重更改节点大小。

标签: pythonpython-3.xmatplotlibgraphnetworkx

解决方案


您可以将labels属性与相应的 dict 和node_color属性与相应的列表一起使用。对于此代码:

G = nx.Graph()
G.add_node(0, weight=8)
G.add_node(1, weight=5)
G.add_node(2, weight=3)
labels = {n: G.nodes[n]['weight'] for n in G.nodes}
colors = [G.nodes[n]['weight'] for n in G.nodes]
nx.draw(G, with_labels=True, labels=labels, node_color=colors)

Networkx 将绘制:

在此处输入图像描述

如果你想同时绘制节点 ID 和它的权重,你可以这样写:

labels = {n: str(n) + '; ' + str(G.nodes[n]['weight']) for n in G.nodes}


如果您在节点中缺少weight属性并想要绘制它们,您可以使用以下代码:

labels = {
    n: str(n) + '\nweight=' + str(G.nodes[n]['weight']) if 'weight' in G.nodes[n] else str(n)
    for n in G.nodes
}

我认为在不同颜色的节点附近绘制权重几乎是不可能的。这是我能给你的最好建议。


推荐阅读