如何修改networkx的Digraph中的边标签
How to modify edge labels in Digraph of networkx
我正在使用 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", 0), ("double1", "double3", 2), ("single2", "double3", 0), (
"double2", "double4", 1), ("double2", "double5", 3), ("double3", "double5", 2), ("double4", "double6", 1), ("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, pos, with_labels=False, arrows=True)
nx.draw_networkx_edges(my_graph, pos)
plt.show()
plt.clf()
注释代码是我尝试过的,至少可以缩短标签文本,但它根本不会影响图表。
要求输出:
A similar graph with only weights(numbers) visible on edges. Or
at-least with shorter edge labels.
我还没有使用过 pygraphviz
,但我希望这个通用解决方案对您有用。
networkx
包允许以多种方式查找边缘属性,例如:
my_graph.edges.data()
- 包含边属性字典的元组列表
my_graph.edges.data('weight')
- 包含特定属性值的元组列表
nx.get_edge_attributes(my_graph,'weight')
- 与之前类似,采用字典形式。
draw_networkx_edge_labels的文档列出了所有的参数,其中之一是:
edge_labels (dictionary) - Edge labels in a dictionary keyed by edge two-tuple of text labels (default=None). Only labels for the keys in the dictionary are drawn.
我认为此时应该输入哪种形式并不难猜。使用:
nx.draw_networkx_edge_labels(my_graph, pos, edge_labels = nx.get_edge_attributes(my_graph,'weight'))
所以,毕竟,我认为你们非常接近:)
我正在使用 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", 0), ("double1", "double3", 2), ("single2", "double3", 0), (
"double2", "double4", 1), ("double2", "double5", 3), ("double3", "double5", 2), ("double4", "double6", 1), ("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, pos, with_labels=False, arrows=True)
nx.draw_networkx_edges(my_graph, pos)
plt.show()
plt.clf()
注释代码是我尝试过的,至少可以缩短标签文本,但它根本不会影响图表。
要求输出:
A similar graph with only weights(numbers) visible on edges. Or at-least with shorter edge labels.
我还没有使用过 pygraphviz
,但我希望这个通用解决方案对您有用。
networkx
包允许以多种方式查找边缘属性,例如:
my_graph.edges.data()
- 包含边属性字典的元组列表my_graph.edges.data('weight')
- 包含特定属性值的元组列表nx.get_edge_attributes(my_graph,'weight')
- 与之前类似,采用字典形式。
draw_networkx_edge_labels的文档列出了所有的参数,其中之一是:
edge_labels (dictionary) - Edge labels in a dictionary keyed by edge two-tuple of text labels (default=None). Only labels for the keys in the dictionary are drawn.
我认为此时应该输入哪种形式并不难猜。使用:
nx.draw_networkx_edge_labels(my_graph, pos, edge_labels = nx.get_edge_attributes(my_graph,'weight'))
所以,毕竟,我认为你们非常接近:)