Networkx:箭头,绘图

时间:2018-07-19 03:19:14

标签: python plot networkx

我需要更改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

因此,我需要帮助将这种箭头样式更改为我们都知道的经典箭头。有没有人可以帮助我更轻松地做到这一点?

1 个答案:

答案 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`

enter image description here

#draw with `width=3.0`

enter image description here

如果您还考虑此代码nx.draw_networkx_nodes(G, pos, label="ciudades",size=0.1)0.1)中的节点大小,则它很小。

更改箭头:

draw_networkx_edges()还具有arrows的属性(默认设置为Truearrowstyle的属性,该属性提供了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代码中。如果没有用于生成图像的数据,就很难说出这些组合将提供最佳结果-很容易插入不同的变量并查看会发生什么。