python - 图形清除后matplotlib重绘补丁
问题描述
我想存储一些补丁并在图形清除后重新绘制它们。下面的最小示例让你
- 单击鼠标按钮 1 绘制带有图像的轴
- 单击鼠标按钮 2 绘制圆形补丁
- 单击鼠标按钮 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()
解决方案
推荐阅读
- java - 如何从 Android 中的 gridview 获取项目的背景颜色?
- sql - 使用复制语句插入现有表无效
- terraform - 如何在 terraform v0.12 上构造名称
- c++ - 将编写的类拆分为两个文件(C++)
- excel - 如果未找到值,则在 Excel 公式中添加空白字段
- expected-exception - 'return' 和 '}' (大括号)之前的预期表达式。我已尝试更改所有内容,但无法运行
- javascript - API 返回几个字符串转义
- c# - ASP.NET MVC - 使用 Oracle 和 Dapper,使用分页
- visual-c++ - link.exe 使用的 .lib 文件是什么?
- javascript - 按 2 个动态键对数组进行排序