Pyplot: обновление окна imshow()
У меня есть два метода: generate_window(), который показывает изображение и on_click(), который реагирует на щелчок в окне, показывающем изображение. Они выглядят так:
def generate_panel(img):
plt.figure()
ax = plt.gca()
fig = plt.gcf()
implot = ax.imshow(img)
# When a colour is clicked on the image an event occurs
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()
def onclick(event):
if event.xdata != None and event.ydata != None:
# Change the contents of the plt window here
В последней строке кода я хочу иметь возможность изменить изображение, показанное в окне plt, но я не могу заставить его работать. Я пробовал set_data() и draw() в разных местах, но это не сработало. Какие-либо предложения? Заранее спасибо.
1 ответ
Вы также должны включить интерактивный режим, используя plt.ion()
тогда просто звоню plt.draw()
после вашей модификации должно работать.
NB: при использовании интерактивного режима вы должны указать аргумент block=True
на plt.show()
чтобы предотвратить немедленное закрытие окна.
Эта измененная версия вашего примера должна отображать окружность при каждом щелчке мыши:
from matplotlib import pyplot as plt
import matplotlib.image as mpimg
import numpy as np
def generate_panel(img):
plt.figure()
ax = plt.gca()
fig = plt.gcf()
implot = ax.imshow(img)
# When a colour is clicked on the image an event occurs
cid = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show(block=True)
def onclick(event):
if event.xdata is not None and event.ydata is not None:
circle = plt.Circle((event.xdata,
event.ydata), 2, color='r')
fig = plt.gcf()
fig.gca().add_artist(circle)
plt.draw()
# Change the contents of the plt window here
if __name__ == "__main__":
plt.ion()
img = np.ones((600, 800, 3))
generate_panel(img)