我需要更改networkx上有向图的默认箭头样式。我已经阅读了有关matplotlib.patches.ArrowStyle的内容,但是我的编码太新了,甚至在python中还是更新的,所以我一点也不了解。我当前的代码是:
G=nx.DiGraph()
n=len(C)
print(n)
for i in range(n):
G.add_node(i)
for i in nodos_usuarios:
for j in nodos_cri:
if Y[i,j].x==1:
G.add_edge(i,j)
pos = nx.circular_layout(G)
x=G.node()
y=G.edges()
elist = edges
print(x)
print("")
print(y)
print("")
nx.draw_networkx_nodes(G, pos, label="ciudades",size=0.1)
nx.draw_networkx_labels(G, pos)
nx.draw_networkx_edges(G, pos, edgelist=elist, edge_color='green', width=3, label="S")
plt.legend(fontsize = 'medium')
plt.axes().set_aspect('equal')
plt.savefig("Red.png")
plt.show()
Y是与图G有关的矩阵。我的当前输出是: Ugly graph - Ugly arrow
因此,我需要帮助将这种箭头样式更改为我们都知道的经典箭头。有没有人可以帮助我更轻松地做到这一点?
答案 0 :(得分:0)
Networkx具有几个属性,可用于修改draw_networkx_edges
。您似乎将width
设置为与图的大小不成比例。没有数据,我无法复制,但是如果您将width=3
缩小到较小,或者将整体尺寸缩小到较大(与边缘的宽度成比例,则您将得到一个外观更好的图形。) >
networkx.drawing.nx_pylab.draw_networkx_edges上的文档。请参见width
,其中默认设置为1.0
,而不是您对3.0
的覆盖。
使用来自THIS来源的简单示例:
#draw with `width=1.0`
#draw with `width=3.0`
如果您还考虑此代码nx.draw_networkx_nodes(G, pos, label="ciudades",size=0.1)
(0.1
)中的节点大小,则它很小。
draw_networkx_edges()
还具有arrows
的属性(默认设置为True
和arrowstyle
的属性,该属性提供了matplotlib.patches.ArrowStyle
设置的可选箭头样式。您可以执行以下操作:
nx.draw_networkx_edges(
G, pos,
edgelist=elist,
edge_color='green',
width=3,
label="S",
arrowstyle='-|>') #<-- This is the "CurvedFilledB" class
在ArrowStyle
的文档中,您只需将要修改的属性特征传递到draw_networkx_edges
代码中。如果没有用于生成图像的数据,就很难说出这些组合将提供最佳结果-很容易插入不同的变量并查看会发生什么。