Fig.canvas.draw在绘制多个条形图时冻结吗?

时间:2019-04-24 22:17:29

标签: python numpy matplotlib

我正在尝试编写一个在一定范围内对多个条形图进行动画处理的程序。我已经设置了我想要使用的数据,并且在开始绘制时它开始平稳运行。然后,仅在数据开始减少时,绘图窗口才会停留并冻结几秒钟,直到最终显示最终值。

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import time
matplotlib.use('TKAgg')


def animated_barplot():
    # http://www.scipy.org/Cookbook/Matplotlib/Animations
    x = [np.linspace(0, 1, num=500).tolist(), np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                                                                 np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist(),
         np.concatenate([np.linspace(0, 0.5, num=100, endpoint=False),
                          np.linspace(0.5, 0, num=400)], axis=0).tolist()]
    N = 11
    y = [x[0][0], x[1][0], x[2][0], x[3][0], x[4][0], x[5][0], x[6][0], x[7][0], x[8][0], x[9][0], x[10][0]]
    rects = plt.bar(range(N), y[0],  align='center')
    for i in range(500):
        y = np.random.rand(11)
        y = [x[0][i], x[1][i], x[2][i], x[3][i], x[4][i], x[5][i], x[6][i], x[7][i], x[8][i], x[9][i], x[10][i]]
        for rect, h in zip(rects, y):
            rect.set_height(h)
        fig.canvas.draw()
        time.sleep(512/22050)

fig = plt.figure()
plt.xlim([-1,11])
plt.ylim([0,1])
win = fig.canvas.manager.window
win.after(100, animated_barplot)

plt.show()

我知道这是很多代码,我很抱歉,主要是数据,但是我认为这是必要的,因为我认为这是问题所在。理想情况下,应该使代码在整个绘制过程中平稳运行,并以第一个条形图为1结束,其他条形图为0结束。然后,我将使用屏幕捕获软件将其制作为视频,因为我找不到方法将其保存为最终图形的图像以外的任何其他图像。

0 个答案:

没有答案