我正在尝试创建一个在节点外打印节点标签的图形.我能够生成如下所示的"偏移"来解决目的.但是,有时标签与边缘重叠(这是不合需要的,因为在节点周围有很多空白区域可以打印相应的标签).我需要以这样的方式标记这些节点,使得标签不与任何边缘重叠,或者至少尽可能地尽量减少重叠.
import networkx as nx
from networkx.utils import is_list_of_ints, flatten
import matplotlib.pyplot as plt
G=nx.Graph()
G = nx.complete_graph(5)
mapping = {0:'aaaaaaa',1:'bbbbbbb',2:'ccccccc', 3:'dddddddd', 4:'eeeeeeeee'}
G = nx.relabel_nodes(G,mapping)
plt.figure(figsize=(10,10), facecolor="w", frameon=False)
pos = nx.graphviz_layout(G, prog="fdp") #calculate position (x,y) coordinates
nx.draw_networkx_nodes(G,pos,node_size=1200,node_shape='o',node_color='0.75')
nx.draw_networkx_edges(G,pos, width=2,edge_color='b')
#for labeling outside the node
offset =10
pos_labels = {}
keys = pos.keys()
for key in keys:
x, y = pos[key]
pos_labels[key] = (x, y+offset)
nx.draw_networkx_labels(G,pos=pos_labels,fontsize=2)
plt.show()
Run Code Online (Sandbox Code Playgroud)
networkx中是否有任何可以处理这种情况的功能.我google了很长时间没有成功.