我试图在图像流的顶部绘制各种矩形。在显示下一个图像之前,应再次删除所有以前的矩形。
从this question我找到了第一个可能的解决方案。以下是我目前正在做的事情的简化示例。
fig, ax = plt.subplots(1)
im = ax.imshow(np.zeros((800, 800, 3)))
for i in range(100):
img = plt.imread('my_image_%03d.png' % i)
im.set_data(img)
rect_lst = getListOfRandomRects(n='random', dim=img.shape[0:2])
patch_lst = [patches.Rectangle((r[0], r[1]), r[2], r[3],
linewidth=1, facecolor='none')
for r in rect_lst]
[ax.add_patch(p) for p in patch_lst]
plt.pause(0.1)
plt.draw()
[p.remove() for p in patch_lst]
我不喜欢这件事是我必须跟踪patch_lst
以便再次删除它们。我宁愿简单地删除所有补丁并得到这样的东西:
for i in range(100):
[...]
rect_lst = getListOfRandomRects(n='random', dim=img.shape[0:2])
[ax.add_patch(patches.Rectangle((r[0], r[1]), r[2], r[3],
linewidth=1, facecolor='none'))
for r in rect_lst]
plt.pause(0.1)
plt.draw()
ax.clear_all_patches() # <-- this is what I am looking for
我确实尝试了ax.clear()
,但这也删除了基础图像。有什么建议吗?
答案 0 :(得分:3)
一种可能的方法是使用ax.patches()
获取补丁列表。因此,您可以使用现有的列表推导来使用列表删除修补程序,而是将列表替换为for i in range(100):
[...]
rect_lst = getListOfRandomRects(n='random', dim=img.shape[0:2])
[ax.add_patch(patches.Rectangle((r[0], r[1]), r[2], r[3],
linewidth=1, facecolor='none'))
for r in rect_lst]
plt.pause(0.1)
plt.draw()
[p.remove() for p in reversed(ax.patches)]
:
connectFauxDOM