绘制成对的线条

时间:2013-07-17 11:40:20

标签: python animation matplotlib plot

我正在开展一个网络项目,我需要在点(节点)对之间绘制线条(边)。目前我正在使用matplotlib.pyplot,但问题是pyplot.plot(x,y)从(x [0],y [0])开始,然后继续到(x [1],y [1] ])等 我有一个单独的元组列表用于连接节点:
edges = [(0,1),(0,2),(3,2),(2,1)...(m,n)],它指的是单独节点的索引。 问题是我需要使用matplotlib.animation来设置动画。

只是在节点之间添加线条(静态图片)我使用的是ax.add_line(Line2D([x1,x2],[y1,y2])),但我无法弄清楚如何让这个方法起作用with animation.FuncAnimation()。

一些虚拟代码:

import matplotlib.pyplot as plt

edges = [(0,1), (2,3), (3,0), (2,1)]

x = [-5, 0, 5, 0]
y = [0, 5, 0, -5]

lx = []
ly = []
for edge in edges:
    lx.append(x[edge[0]])
    lx.append(x[edge[1]])
    ly.append(y[edge[0]])
    ly.append(y[edge[1]])

plt.figure()
plt.plot(x, y, 'ro')
plt.plot(lx, ly, '-', color='#000000')
plt.show()

(以下图片及下一个例子)

如果我改为使用以下内容:

import matplotlib.pyplot as plt
from pylab import Line2D, gca

edges = [(0,1), (2,3), (3,0), (2,1)]

x = [-5, 0, 5, 0]
y = [0, 5, 0, -5]

plt.figure()
ax = gca()
for edge in edges:
    ax.add_line(Line2D([x[edge[0]], x[edge[1]]], [y[edge[0]], y[edge[1]]], color='#000000'))

ax.plot(x, y, 'ro')
plt.show()

一切都按照我需要的方式运作: Examples
不幸的是,这在动画期间是不可能的(afaik)。我需要的是一种在各个节点对之间绘制线条的方法。

非常糟糕的问题表述,我知道,但我希望有人理解并能够提供帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

>>> edges=[(0,1), (0,2), (3,2), (2,1)]
>>> 
>>> xx = [x[0] for x in edges]
[0, 0, 3, 2]
>>> yy = [x[1] for x in edges]
[1, 2, 2, 1]
>>> line, = ax.plot(xx, yy, 'ro-')

然后将其提供给plot并为结果设置动画。这是one example(有很多)。