我正在尝试使用NetworkX库在DiGraph中的两个节点之间添加弯曲的箭头。
nx.draw_networkx_edges
的文档中提到属性connectionstyle = 'arc3, rad = 0.2'
应该产生弯曲的连接器。但我无法重现。
我还研究了模块matplotlib.patches
并按https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.ConnectionStyle.html#matplotlib.patches.ConnectionStyle中所述调用ConnectionStyle
;但我仍然得到相同的视觉效果。
array_of_edges = list(zip(df.start_node,df.end_node,df.weight))
G.add_weighted_edges_from(array_of_edges)
nx.draw_networkx_edges(G,pos_nodes,
edge_color = '#5B174C',
width = df['weight']/600,
alpha = 0.8,
connectionstyle= 'arc3,rad=0.2'
)
这就是我得到的,这是我所需要的: https://imgur.com/a/1TcPfY9
答案 0 :(得分:3)
前一段时间我有一个类似的问题(我想比较同一个网络的两个状态)。我无法使用networkx
来制定解决方案,因此我自己制作了代码,可以在here中找到其代码。
您将必须将边缘列表转换成正方形邻接矩阵,其中不存在连接用NaN表示,而非NaN条目将被解释为边缘权重并映射到边缘颜色。然后,您可以使用
调用该模块network_line_graph.draw(adjacency_matrix, node_order=None, arc_above=True)
请注意,如果您未明确指定节点顺序,则使用递归最小流切割来优化节点顺序,以将强连接的子网/节点放置在一起(理想情况下,您将使总弧长最小化,但这会很快增加计算量)
API与networkx非常相似,但是如果确实有任何问题,请在github上提出问题。