【发布时间】:2018-10-01 09:47:36
【问题描述】:
我想使用 networkx(如果您知道更好的框架,我也想采用另一个框架)来创建一个 节点在固定位置的graps。同时图的边不能重叠。
我之前的代码是这样的:
#!/usr/bin/env python3
import networkx as nx
import matplotlib.pyplot as plt
# Graph data
names = ['A', 'B', 'C', 'D', 'E']
positions = [(0, 0), (0, 1), (1, 0), (0.5, 0.5), (1, 1)]
edges = [('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('D', 'A')]
# Matplotlib figure
plt.figure('My graph problem')
# Create graph
G = nx.MultiDiGraph(format='png', directed=True)
for index, name in enumerate(names):
G.add_node(name, pos=positions[index])
labels = {}
for edge in edges:
G.add_edge(edge[0], edge[1])
labels[(edge[0], edge[1])] = '{} -> {}'.format(edge[0], edge[1])
layout = dict((n, G.node[n]["pos"]) for n in G.nodes())
nx.draw(G, pos=layout, with_labels=True, node_size=300)
nx.draw_networkx_edge_labels(G, layout, edge_labels=labels)
plt.show()
并给出以下结果
如何确保边缘是“圆角的”,以免它们重叠?
【问题讨论】:
-
对不起,这里帮不上忙;以下 setup.py 会导致您的代码出现段错误。 cairocffi==0.9.0 cffi==1.11.5 cycler==0.10.0 decorator==4.3.0 kiwisolver==1.0.1 matplotlib==3.0.0 networkx==2.2 numpy==1.15.2 pgi==0.0 .11.2 pycparser==2.19 pyparsing==2.2.2 python-dateutil==2.7.3 Six==1.11.0 你介意分享你的吗?
-
评论格式最差-.-'
-
只需执行 pip install networkx && pip install matplotlib
-
谢谢,我猜是好意思。但不是我需要的。我之前做了你的建议,它缺少几个依赖项。安装它们后,我遇到了段错误。这不是我想要调试的,所以如果你可以复制你正在成功使用的 setup.py,那么有人可能会帮助你而不会遇到与我相同的问题。当您使用它时,您使用的是哪个特定的 python 版本? 3.5、3.6 还是 3.7?
-
AFAIK,目前无法使用
networkx绘制具有弯曲边缘的图形,尽管修改源代码不会太困难。networkx使用 matplotlib 中的FancyArrowPatch类在draw_networkx_edges(由draw包装)中绘制箭头。FancyArrowPatch支持connectionstyle参数,该参数不是由draw_networkx_edges设置的;默认是一条直线,这就是你现在得到的。鉴于您的 MWE 的质量,我怀疑您将设法克隆networkxgithub 存储库,并修补draw_networkx_edges。
标签: python matplotlib graph networkx directed-graph