如何在Networkx的Digraph中修改边缘标签

问题描述

我正在使用matplotlib和graphviz绘制图形。工作正常,但我想消除边缘的标签文本。

输出

enter image description here

我只希望显示重量(边缘上的数字)而没有任何额外的标签。它们有时不可读。 我尝试了多种技巧,但无法将其删除

代码

import networkx as nx
from networkx.drawing.nx_agraph import write_dot,graphviz_layout
from matplotlib import pyplot as plt

my_graph = nx.DiGraph()
my_graph.add_weighted_edges_from([("single1","double1",0),("double1","single2","double3",2),("single2",(
    "double2","double4",1),("double2","double5",3),("double3",("double4","double6",4)])


write_dot(my_graph,"graph.dot")

plt.title("draw graph")
pos = graphviz_layout(my_graph,prog='dot')
# labels = nx.get_edge_attributes(my_graph,'w')


# nx.draw_networkx_edge_labels(my_graph,pos,labels=labels)
nx.draw_networkx_edge_labels(my_graph,pos)

nx.draw(my_graph,with_labels=False,arrows=True)
nx.draw_networkx_edges(my_graph,pos)


plt.show()
plt.clf()

注释代码是我尝试过的事情,至少可以缩短标签文本,但它根本不会影响图形。

必需的输出

类似的图形,仅在边缘可见权重(数字)。要么 至少具有较短的边缘标签

解决方法

我还没有使用pygraphviz,但我希望这种通用的解决方案对您有用。

networkx包允许以多种方式查找边缘属性:

  • my_graph.edges.data()-包含边缘属性字典的元组列表
  • my_graph.edges.data('weight')-包含特定属性值的元组列表
  • nx.get_edge_attributes(my_graph,'weight')-与先前类似,采用字典形式。

draw_networkx_edge_labels的文档列出了所有参数,其中一个是:

edge_labels(字典)-字典中的边缘标签由文本标签的边缘二元组(默认为“无”)键入。仅绘制字典中键的标签。

我认为现在不难猜测应该输入哪种形式。使用:

nx.draw_networkx_edge_labels(my_graph,pos,edge_labels = nx.get_edge_attributes(my_graph,'weight'))

所以,毕竟,我认为您非常接近:)