同时更新matplotlib中的多个文本对象

时间:2015-03-01 16:59:44

标签: python-2.7 numpy text matplotlib

我试图在matplotlib中同时为几个文本对象设置动画。我有一个3-D numpy数组(arrow_data)数据,它存储了我需要绘制的unicode箭头的索引(所有unicode箭头的文本都存储在列表arrows中)。该np.array的第一维和第二维指示网格上需要绘制此箭头的位置,第三维是“时间”。我需要更新图的尺寸(即箭头在数组的三维尺寸上随时间变化)。

以下是我通过“时间”设置动画这些箭头的代码。使用循环,但我不知道如何制作文本对象的集合,就像我可以使用散点图等其他matplotlib函数,然后集体(并有效地)更新每个的set_text属性他们。循环过去的时间'变量很好,但如果可能的话,我宁愿不在文本对象的网格上使用循环。

关于如何在没有双嵌套循环的情况下执行此操作的任何想法?

感谢。

from matplotlib import pyplot as plt
import numpy as np
import time
import matplotlib
matplotlib.interactive(True)

arrows = [u'\u2190', u'\u2196', u'\u2191', u'\u2197', u'\u2192', u'\u2198', u'\u2193', u'\u2199']
rest_time = 0.25
steps = 20

fig, ax = plt.subplots(1, 1)
ax.plot([0,4],[0,4], c = 'white')
objs = [[[] for i in range(4)] for j in range(4)]
for i in range(4):
    for j in range(4):
        objs[i][j] = ax.text(i+0.5,j+0.5, arrows[i], ha = 'center', va = 'center')
fig.canvas.draw()

arrow_data = np.random.randint(0,len(arrows), (4,4,steps))

for t in range(arrow_data.shape[2]):
    for i in range(4):
        for j in range(4):
            objs[i][j].set_text(arrows[arrow_data[i,j,t]])
    fig.canvas.draw()
    time.sleep(rest_time)

0 个答案:

没有答案
相关问题