首页 > 解决方案 > 图形清除后matplotlib重绘补丁

问题描述

我想存储一些补丁并在图形清除后重新绘制它们。下面的最小示例让你

  1. 单击鼠标按钮 1 绘制带有图像的轴
  2. 单击鼠标按钮 2 绘制圆形补丁
  3. 单击鼠标按钮 3 清除图形

当你第二次这样做时,圆圈不再出现。我该怎么做才能做到这一点?

PS:在现实生活中,这都是复杂图像查看器应用程序的一部分,可在不同布局/轴数之间切换。所以,我真的需要 fig.clf()。此外,该应用程序处理滚动图像堆栈,其中一些图像有补丁,有些没有。我真的很想保留补丁以在以后重绘相同的图像(甚至可能在不同的轴上)时重绘它们。

import matplotlib.pyplot as plt
from matplotlib.patches import Circle
import numpy as np

ax      = None
circle  = None
image   = None

array   = np.array([np.arange(512)/51.1,]*512)
fig     = plt.figure(facecolor='black')

def on_press(event):
    global ax, circle, image

    if event.button == 1:
        if not ax:
            ax = fig.add_axes([0.1,0,0.8,1])
        image = ax.imshow(array, cmap = 'Greys')
        
    if event.button == 2:
        if not circle:
            circle = Circle( (255,255), 25, color='lightgreen', fill=None)
        if ax and not circle in ax.patches:
            ax.add_patch(circle)
            print(circle)
            print(ax.patches)
    
    if event.button == 3:
        fig.clf()
        ax = None
        if circle:
            circle.axes = None
        
    fig.canvas.draw_idle()

fig.canvas.mpl_connect('button_press_event', on_press)
plt.show()

标签: pythonmatplotlib

解决方案


推荐阅读