У меня есть следующий скрипт
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
fig, ax = plt.subplots()
# draw a horizontal line y=0
line, = ax.plot(x, [0 for _ in x])
def mod_ydata(ev):
X = ev.xdata
if X is not None:
n = round(X)
line.set_ydata([n for _ in x])
fig.canvas.draw_idle()
fig.canvas.mpl_connect('button_press_event', mod_ydata)
plt.show()
Ожидаемое поведение исходная горизонтальная линия y = 0 очищается в ответ на щелчок мыши и новую горизонтальную линию, y = round (х)
где x - абсцисса щелчка мыши.
Неожиданное поведение исходная горизонтальная линия очищается и новая горизонтальная линия не рисуется.
Я проверил в интерактивном терминале IPython, используя line.get_ydata()
, что обратный вызов действительно обновляет ординаты.
Я должен сказать, что я играл с plt.ion()
, повторяя plt.show()
в обратном вызове, используя a1.draw()
и т. Д. Всегда безрезультатно.
Я понимаю, что, возможно, мне не хватает очевидного, но вот я ...