Python 使用matplotlib的动态图形在一段时间后变得较慢
我正在尝试使用matplotlib创建一个动态网格。然而,在只运行了大约10次迭代之后,时间步长似乎越来越长,即使我已经将其设置为一个固定的数字(代码中为0.1秒)。在大约70次迭代之后,它变得异常缓慢(每次更改大约3秒)。下面是一个代码示例: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]
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()
移出循环,但那样我就看不到图表了