如何将NetworkX图中与边标签对应的值四舍五入?

4
我正在使用networkx绘制一个无向加权图,并希望标记每个边与其相应的权重。我能够做到这一点,但我遇到了将边标签值四舍五入以使得结果图不会太杂乱的问题。
我们假设我已经创建了邻接矩阵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()

生成的图表如下,显示边缘标签未进行四舍五入处理:

enter image description here

1个回答

5
将标签作为字符串(而不是浮点数)传递,并使用 字符串格式化工具 进行字符串格式化:
edge_labels = dict([((u,v,), f"{d['weight']:.2f}") for u,v,d in G.edges(data=True)])

并不是我曾经尝试过像你那样去做。绝对没有。


1
请注意,您可以使用字典推导式使其更简单:edge_labels = {(u, v): f'{d["weight"]:.2f}' for u, v, d in G.edges(data=True)} - Nephanth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接