Как перерисовать фигуру по событию в matplotlib?Python

Программы на Python
Ответить
Anonymous
 Как перерисовать фигуру по событию в matplotlib?

Сообщение Anonymous »

Я пытаюсь предварительно сгенерировать и сохранить цифры matplotlib в Python, а затем отобразить их с помощью клавиатуры (клавиши курсора влево-вправо).

Частично кажется, что это работает, но после этого происходит сбой первое нажатие клавиши.

Есть идеи, что я делаю не так?
import matplotlib.pyplot as plt
import numpy as np

def new_figure(title, data):
fig,ax = plt.subplots()
plt.plot(data, label=title)
ax.set_xlabel('x-axis')
ax.set_ylabel('value')
plt.legend()
plt.title(title)
plt.close(fig)
return fig

def show_figure(fig):
dummy = plt.figure()
new_manager = dummy.canvas.manager
new_manager.canvas.figure = fig
fig.set_canvas(new_manager.canvas)

def redraw(event, cnt):
event.canvas.figure.clear()
dummy = event.canvas.figure
new_manager = dummy.canvas.manager
new_manager.canvas.figure = figs[cnt]
figs[cnt].set_canvas(new_manager.canvas)
event.canvas.draw()

def keypress(event):
global cnt
if event.key == 'right':
cnt += 1
cnt %= mx
elif event.key == 'left':
cnt -= 1
if cnt < 0:
cnt = mx-1
redraw(event, cnt)

d = range(0, 360)
data = []
data.append(np.sin(np.radians(d)))
data.append(np.cos(np.radians(d)))
data.append(np.tan(np.radians(d)))
titles = ['sin','cos','tan']
mx = len(data)

figs = []
for i in range(mx):
fig = new_figure(titles, data)
figs.append(fig)

cnt = 0

show_figure(figs[0])
figs[0].canvas.mpl_connect('key_press_event', keypress)
plt.show()

В конечном итоге я получаю следующую ошибку:

File "C:\Program Files\Python39\lib\tkinter\__init__.py", line 1636, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: invalid command name ".!navigationtoolbar2tk.!button2"


Подробнее здесь: https://stackoverflow.com/questions/791 ... matplotlib
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»