gpt4 book ai didi

python - 来自 networkx 的 MultiDiGraph 边使用 connectionStyle 绘制

转载 作者:行者123 更新时间:2023-12-03 23:08:58 29 4
gpt4 key购买 nike

是否可以使用 connectionstyle 在具有不同曲率的相同节点处以某种方式绘制不同的边? ?

我写了下面的代码,但我得到了所有三个边重叠:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.MultiDiGraph()
G.add_node('n1')
G.add_node('n2')
G.add_edge('n1', 'n2', 0)
G.add_edge('n1', 'n2', 1)
G.add_edge('n1', 'n2', 2)

pos = nx.spring_layout(G)
nx.draw(G, pos, with_labels=True, connectionstyle='arc3, rad = 0.3')

plt.show()

最佳答案

这可以通过用不同的 rad 绘制每条边来完成。参数 - 如图所示。请注意,我这里的方法使用需要 Python 3.6 的 f 字符串 - 在此之下,您将必须使用不同的方法构建字符串。

代码:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.MultiDiGraph()
G.add_node('n1')
G.add_node('n2')
G.add_edge('n1', 'n2', rad=0.1)
G.add_edge('n1', 'n2', rad=0.2)
G.add_edge('n1', 'n2', rad=0.3)

plt.figure(figsize=(6,6))

pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos)
nx.draw_networkx_labels(G, pos)

for edge in G.edges(data=True):
nx.draw_networkx_edges(G, pos, edgelist=[(edge[0],edge[1])], connectionstyle=f'arc3, rad = {edge[2]["rad"]}')

plt.show()

输出:

enter image description here

我们甚至可以创建一个新函数来为我们执行此操作:
import networkx as nx
import matplotlib.pyplot as plt

def new_add_edge(G, a, b):
if (a, b) in G.edges:
max_rad = max(x[2]['rad'] for x in G.edges(data=True) if sorted(x[:2]) == sorted([a,b]))
else:
max_rad = 0
G.add_edge(a, b, rad=max_rad+0.1)

G = nx.MultiDiGraph()
G.add_node('n1')
G.add_node('n2')

for i in range(5):
new_add_edge(G, 'n1', 'n2')

for i in range(5):
new_add_edge(G, 'n2', 'n1')

plt.figure(figsize=(6,6))

pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos)
nx.draw_networkx_labels(G, pos)

for edge in G.edges(data=True):
nx.draw_networkx_edges(G, pos, edgelist=[(edge[0],edge[1])], connectionstyle=f'arc3, rad = {edge[2]["rad"]}')

plt.show()

输出:

enter image description here

关于python - 来自 networkx 的 MultiDiGraph 边使用 connectionStyle 绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60067022/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com