避免标签在 NetworkX 的边缘被切割

Avoid labels being cut at the edges in NetworkX

我正在使用python networkx 库绘制节点关系图。代码如下:

import networkx as nx 
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_edges_from([("leg", 'body'),('body', 'head'),('body','arm'),('arm','hand')])
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
nx.draw_networkx_labels(G,pos)
plt.show()

一切都很好。数字是:

但是,我想将标签放在节点之外。然后我调整标签的位置。代码是:

import networkx as nx 
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_edges_from([("leg", 'body'),('body', 'head'),('body','arm'),('arm','hand')])
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
# nx.draw_networkx_labels(G, pos)
nx.draw_networkx_labels(G, pos = {k:([v[0], v[1]+0.1]) for k,v in pos.items()})

plt.show()

则图为:

问题是标签没有显示完整,而是超出了边界。那么如何才能正常显示标签呢?谢谢。

您可以将 nx.spring_layout 中的 scale 参数设置为较低的值以缩小位置。它基本上将比例因子应用于节点位置,因此节点位于大小为 [0,scale] 的框中。这是一个例子:

pos = nx.spring_layout(G, scale=0.2)
nx.draw_networkx_nodes(G,pos)
nx.draw_networkx_edges(G,pos)
y_off = 0.02
nx.draw_networkx_labels(G, pos = {k:([v[0], v[1]+y_off]) for k,v in pos.items()})