使用Matplotlib和Pyplot实现2D坐标的简单动画

7

我是matplotlib的新手。我有一组在Python中更新的x-y坐标列表,并希望使用matplotlib的pyplot进行动画处理。我想提前指定x轴和y轴的范围。以下是我的当前代码:

import matplotlib.pyplot as plt
x=[1,2,3,4]
y=[5,6,7,8]
for t in range(100):
    #lists x and y get updated here
    #...
plt.plot(x, y, marker='o', linestyle='None')
plt.show()

如您所见,我在迭代循环的结尾使用了plt.plot()plt.show()来仅绘制最终坐标。但我想把这一步放到循环内部,并在每次迭代时暂停指定时间后进行绘制,以便在循环运行时获得动画效果。
只是将该语句移至循环内部或进行微调并不起作用。虽然我希望保持简单,不想使用matplotlib.animation等过于复杂的模块和库。是否有一些简单的方法(仅使用plt.pause()之类的东西,可能只需要更少的其他内容),让我达到想要的效果呢?
我查看了许多在线资源,但大多数方法都存在一个问题:我正在Windows上使用python(x,y)(即Python版本2.7),使用过于复杂的模块和库会导致崩溃。但是,我能够运行诸如此示例之类的简单内容,它接近我想要的效果,但还不够完美。因此,也许最好的方法是修改这个示例,使其适用于我的2D数据情况(该示例适用于1D行)。但欢迎提出任何其他建议。
1个回答

8
这是从动画演示中改编的内容:
import matplotlib.pyplot as plt 
import numpy as np

fig, ax = plt.subplots()

x = [1, 2, 3, 4]
y = [5, 6, 7, 8]

for t in range(10):
    if t == 0:
        points, = ax.plot(x, y, marker='o', linestyle='None')
        ax.set_xlim(0, 10) 
        ax.set_ylim(0, 10) 
    else:
        new_x = np.random.randint(10, size=5)
        new_y = np.random.randint(10, size=5)
        points.set_data(new_x, new_y)
    plt.pause(0.5)

虽然这很简单,但文档字符串指出它很慢。


+1。这个可以用。我会尝试将其适应到我的最终程序中,看看效果如何。 - Abhranil Das
使用ax.clear()可能更方便;这样你就可以简单地绘制一个新的图形,而不需要区分第一次和后续运行。另外,plt.pause()对我来说会导致错误,我改用了fig.canvas.start_event_loop() - Scipio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接