gpt4 book ai didi

python - 在 Python 中以分别显示所有边的方式绘制有向图

转载 作者:IT老高 更新时间:2023-10-28 20:39:32 25 4
gpt4 key购买 nike

我正在使用 Python 来模拟在有向图上发生的过程。我想制作这个过程的动画。

我遇到的问题是大多数 Python 图形可视化库将有向边对组合成一条边。例如,NetworkX显示下图时只绘制两条边,而我想分别显示四个边:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.MultiDiGraph()

G.add_edges_from([
(1, 2),
(2, 3),
(3, 2),
(2, 1),
])

plt.figure(figsize=(8,8))
nx.draw(G)

Output from NetworkX; parallel edges are overlapping, so only two lines are displayed

我想显示这样的东西,分别绘制每个平行边:

Desired output format; parallel edges are drawn separately

问题R reciprocal edges in igraph in R似乎处理同样的问题,但解决方案是针对 R igraph 库,而不是 Python 库。

有没有一种简单的方法可以使用现有的 Python 图形可视化库来生成这种风格的绘图?如果它可以支持多图,那将是一个奖励。

我愿意接受调用外部程序来生成图像的解决方案。我想生成整个系列的动画帧,所以解决方案必须是自动化的。

最佳答案

Graphviz工具似乎显示出明显的边缘。

例如,给出这个:

digraph G {
A -> B;
A -> B;
A -> B;
B -> C;

B -> A;
C -> B;
}

dot 产生:

example graph

Graphviz 的输入语言非常简单,因此您可以自己生成它,尽管搜索“python graphviz”确实会出现几个库,包括 graphviz module on PyPI .

这是使用 graphviz 模块生成上述图形的 python:

from graphviz import Digraph

dot = Digraph()
dot.node('A', 'A')
dot.node('B', 'B')
dot.node('C', 'C')
dot.edges(['AB', 'AB', 'AB', 'BC', 'BA', 'CB'])

print(dot.source)
dot.render(view=True)

关于python - 在 Python 中以分别显示所有边的方式绘制有向图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379448/

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