我可以通过将值列表传递给draw_network函数来动态更改节点大小或节点颜色。但是我该如何使用ArrowStyle?说我想根据值列表更改ArrowStyle(宽度和长度)。除了单个int值之外,arrowize也不接受任何其他内容。
这是示例代码:
import matplotlib.patches
import networkx as nx
G = nx.DiGraph()
G.add_edge("reddit", "youtube")
G.add_edge("reddit", "google")
G.add_edge("google", "reddit")
G.add_edge("youtube", "reddit")
print(G.adj)
testArrow = matplotlib.patches.ArrowStyle.Fancy(head_length=.4, head_width=.4, tail_width=.1)
nx.draw_networkx(G,
arrowsize=30,
node_size=[5000,50,300],
arrowstyle=testArrow)
答案 0 :(得分:2)
用于更改箭头的尺寸:
根据documentation,没有选择在单个呼叫中执行此操作。但是,可以通过如下一一画出边缘来完成:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()
G.add_edge("reddit", "youtube", w=5)
G.add_edge("reddit", "google", w=10)
G.add_edge("google", "reddit", w=30)
G.add_edge("youtube", "reddit", w=20)
print(G.adj)
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, node_size=[5000, 50, 300])
nx.draw_networkx_labels(G, pos)
for edge in G.edges(data=True):
w = edge[2]['w']
nx.draw_networkx_edges(G, pos, edgelist=[(edge[0],edge[1])], arrowsize=w, node_size=[5000, 50, 300])
plt.show()
这将带来如下效果:
用于更改边的尺寸:
边缘的宽度和长度在概念上有所不同。宽度是可配置的,并且可以轻松地为每个边缘设置,而长度则由节点的位置定义。
要以与节点的大小和颜色类似的方式更改边的宽度,可以调用draw_networkx_edges
,并且参数'width'可以接受float或float数组。
要更改边缘的长度,您必须更改layout,该值由nx.draw_networkx中的'pos'参数设置。默认设置为使用弹簧布局定位。