使用4项列表绘制两个对象

时间:2014-03-12 01:46:20

标签: python matplotlib

我有这个模拟器(引力)我一直在努力,我已经解剖了方程式,数学等等,这是完全合法的。然而,当我为这件事制作动画时,我会发现奇怪的行为。我宁愿不厌倦整个脚本,因为它有点冗长,但我在line.set函数下animate(i)调用的方法会返回一个包含四个值的列表,这是我的位置。笛卡尔坐标(x,y)中的两个粒子。例如,我的列表如下:

[1.2,3.2,4.5,5.1]

其中第一个索引是第一个粒子的x位置,第二个索引是y位置,同样对应于第二个粒子的最后两个元素(索引2和3)。

我的问题是line.set_data(force.updatePosition(dt)) 是否按照我认为的方式工作,即绘制带有索引01的第一个粒子和粒子两个指数23,或者我错过了这一点?绘图工作,粒子出现,但他们得到奇怪的,非感性的运动。

如果完全有必要here是完整的脚本...再次,这就是为什么我没有直接发布它的原因。此外,它仍然非常混乱,因为我还在与它斗争并且尚未清理它。

Tl; DR line.set_data()是否可以绘制两个单独的对象,如果它被提供了包含4个项目的列表?

def init():
    line.set_data([], [])
    return line,

def animate(i):
    line.set_data(force.updatePosition(dt))
    return line,

1 个答案:

答案 0 :(得分:1)

文档说:

Definition: l.set_data(self, *args)
Docstring:
Set the x and y data

ACCEPTS: 2D array (rows are x, y) or two 1D arrays

所以我想你想给它两个列表:

line.set_data([x1, x2], [y1, y2])

但似乎force.updatePosition已经返回了两个列表([pos1]+[pos2])的列表,所以你可以试试:

line.set_data(np.transpose(force.updatePosition(dt)))

我的意见是你可能最好将所有这些信息保存在数组中并删除代码的一半,因为你为每个元素写了两行或四行。