Python 使用matplotlib的动态图形在一段时间后变得较慢

Python 使用matplotlib的动态图形在一段时间后变得较慢,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我正在尝试使用matplotlib创建一个动态网格。然而,在只运行了大约10次迭代之后,时间步长似乎越来越长,即使我已经将其设置为一个固定的数字(代码中为0.1秒)。在大约70次迭代之后,它变得异常缓慢(每次更改大约3秒)。下面是一个代码示例: import matplotlib.pyplot as plt from matplotlib import colors import numpy as np map=[[0,0,0],[0,0,0],[0,0,0]

我正在尝试使用matplotlib创建一个动态网格。然而,在只运行了大约10次迭代之后,时间步长似乎越来越长,即使我已经将其设置为一个固定的数字(代码中为0.1秒)。在大约70次迭代之后,它变得异常缓慢(每次更改大约3秒)。下面是一个代码示例:

    import matplotlib.pyplot as plt
    from matplotlib import colors
    import numpy as np


    map=[[0,0,0],[0,0,0],[0,0,0]]

    plt.ion()
    fig, ax = plt.subplots(1, 1, tight_layout=True)
    color = ['white', 'black', 'red']
    my_cmap = colors.ListedColormap(color)
    # draw the grid
    for x in range(len(map)):
            ax.axhline(x, lw=2, color='k')
        ax.axvline(x, lw=2, color='k')
    ax.axis('off')
    plt.draw()

    for i in range(0,100):
        x = np.random.randint(0,3)
        y = np.random.randint(0,3)

        map[x][y]+=1
        map[x][y]*=-1
        # draw the boxes
        ax.imshow(map, interpolation='none', cmap=my_cmap, extent=[0, len(map), 0, len(map)])
        # turn off the axis labels
        plt.pause(0.1)
我正在使用python3.7。我画图表的方法有什么问题吗?或者有没有更好的方法来绘制它,以便在一些迭代之后更改不会减慢?非常感谢你的帮助

EDIT:刚刚找到基本相同的

与反复调用
imshow
不同,更新绘图中的数据更有效。 我会添加一个变量(
img
如下)来存储对显示图像的引用,并使用
set\u data
来更改像素:

img = None
for i in range(0,100):
    x = np.random.randint(0,3)
    y = np.random.randint(0,3)

    map[x][y]+=1
    map[x][y]*=-1

    # draw the boxes
    if img is None:
        img = ax.imshow(map, interpolation='none', cmap=my_cmap, 
                        extent=[0, len(map), 0, len(map)])
    else:
        img.set_data(map)
    # turn off the axis labels
    plt.pause(0.1)

如果我正确阅读了您的代码,您就不会从以前的迭代中删除美工人员。@gmds您所说的“美工人员”是什么意思?美工人员是告诉
matplotlib
绘制内容的对象。线、点、补丁等都是艺术家。有关更多信息,请参阅。换言之,您将继续向图形中添加绘图信息,但即使不再需要(由艺术家在“前面”隐藏),也不要删除它。@gmds哦,谢谢,是的,这正是我所想的!我觉得我在堆积一些东西,但我不知道是什么。有什么方法可以删除艺术家或只是更新它?我尝试将
ax.imshow()
移出循环,但那样我就看不到图表了