首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python/networkx有向图中的独立边箭头

python/networkx有向图中的独立边箭头
EN

Stack Overflow用户
提问于 2020-04-24 23:50:07
回答 2查看 1.8K关注 0票数 3

我想要得到类似的东西:

使用python库networkx。我可以使用以下代码生成类似的有向图:

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
import networkx as nx

G = nx.DiGraph()

G.add_edge('1','2')
G.add_edge('1','3')
G.add_edge('3','2')
G.add_edge('3','4')
G.add_edge('4','3')

nx.draw(G, node_color='w', edgecolors='k', width=2.0, with_labels=True)
plt.show()

这会产生:

但是,节点3和4之间的箭头是重叠的,它看起来就像是一个有两个头的单箭头。是否有可能将它们稍微分开,以便更明显地说明那里有两条边,而不只是一条边?(我知道可以使用pygraphviz来完成,但我正在尝试使用matplotlib来完成)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-27 21:08:31

不久前,我使用了networkx绘图实用程序来解决这个问题和其他几个我遇到的问题。该包名为netgraph,支持绘制networkxigraph图结构(以及简单的边列表)。它在幕后使用matplotlib,并公开创建的艺术家,这样即使没有内置的功能,也很容易进一步操作它们。

代码语言:javascript
运行
复制
#!/usr/bin/env python

"""
https://stackoverflow.com/questions/61412323/separate-edge-arrows-in-python-networkx-directed-graph
"""

import matplotlib.pyplot as plt
import networkx as nx
import netgraph

G = nx.DiGraph()

G.add_edge('1','2')
G.add_edge('1','3')
G.add_edge('3','2')
G.add_edge('3','4')
G.add_edge('4','3')

netgraph.draw(G, node_color='w', edge_color='k', edge_width=2.0, node_labels={str(ii) : str(ii) for ii in range(1,5)})
plt.show()

票数 1
EN

Stack Overflow用户

发布于 2020-04-24 23:56:05

对于两个节点之间的多条边,您需要一个MultiDiGraph

代码语言:javascript
运行
复制
G = nx.MultiDiGraph()

G.add_edge('1','2')
G.add_edge('1','3')
G.add_edge('3','2')
G.add_edge('3','4')
G.add_edge('4','3')

为了可视化网络,你可以使用Graphviz,它显示平行的边。您可以在dot中编写图形,并使用graphviz.Source显示图形

代码语言:javascript
运行
复制
from networkx.drawing import nx_pydot
from graphviz import Source

nx_pydot.write_dot(G, 'multig.dot')
Source.from_file('multig.dot')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61412323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档