在 networkx 中添加带有节点名称的描述

Add description with node name in networkx

我正在尝试使用节点名称添加 description/text。

例如:

import networkx as nx
G = nx.Graph()
G.add_edge(1,2)
G.add_edge(2,3)
nx.draw(G,with_labels=True)

以上代码将给我这个以节点名称作为标签的图表。

如果我使用自定义标签:

labels = {}
labels[1] = 'First Node'
labels[2] = 'Second Node'
labels[3] = 'Third Node'
nx.draw(G,labels=labels,with_labels=True)

我得到这张图:

我正在处理图形问题,出于调试目的,我需要为每个节点附加信息以及节点名称。但是当我附加时我无法获得名称,如果我附加额外的文本那么我无法获得节点名称。

如何在节点而不是边缘上添加两者?

使用此代码,您可以绘制节点 ID 和其他信息:

import networkx as nx
import matplotlib.pylab as pl

G = nx.Graph()
G.add_edge(1, 2)
G.add_edge(2, 3)

# get positions
pos = nx.spring_layout(G)

nx.draw(G, pos, with_labels=True)

# shift position a little bit
shift = [0.1, 0]
shifted_pos ={node: node_pos + shift for node, node_pos in pos.items()}

# Just some text to print in addition to node ids
labels = {}
labels[1] = 'First Node'
labels[2] = 'Second Node'
labels[3] = 'Third Node'
nx.draw_networkx_labels(G, shifted_pos, labels=labels, horizontalalignment="left")

# adjust frame to avoid cutting text, may need to adjust the value
axis = pl.gca()
axis.set_xlim([1.5*x for x in axis.get_xlim()])
axis.set_ylim([1.5*y for y in axis.get_ylim()])
# turn off frame
pl.axis("off")

pl.show()

结果