问题描述
我正在使用matplotlib和graphviz绘制图形。工作正常,但我想消除边缘的标签文本。
输出:
我只希望显示重量(边缘上的数字)而没有任何额外的标签。它们有时不可读。 我尝试了多种技巧,但无法将其删除。
代码:
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'))
所以,毕竟,我认为您非常接近:)