我正在使用networkx绘制一个无向加权图,并希望标记每个边与其相应的权重。我能够做到这一点,但我遇到了将边标签值四舍五入以使得结果图不会太杂乱的问题。
我们假设我已经创建了邻接矩阵A,并且labels_dict是一个字典,其值是每个节点的文本标签,例如“T8-P8”。
生成的图表如下,显示边缘标签未进行四舍五入处理:
我们假设我已经创建了邻接矩阵A,并且labels_dict是一个字典,其值是每个节点的文本标签,例如“T8-P8”。
import networkx as nx
G=nx.from_numpy_matrix(A)
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,nodelist=[j for j in
range(0,len(A))],node_color='gray',node_size=1000,ax=None,alpha=0.8)
nx.draw_networkx_labels(G,pos,labels_dict,font_size=17)
nx.draw_networkx_edges(G,pos,width=1.0,alpha=0.5)
# below I attempt to round off the edge label values to 2 decimal places using numpy's "around" function.
edge_labels=dict([((u,v,),np.around(d['weight'],2))
for u,v,d in G.edges(data=True)])
nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels)
ax=plt
ax.axis('off')
fig = ax.gcf()
plt.show()
生成的图表如下,显示边缘标签未进行四舍五入处理:
edge_labels = {(u, v): f'{d["weight"]:.2f}' for u, v, d in G.edges(data=True)}
- Nephanth