Вот минимальный пример использования mplcursors . Опция hover
установлена, поэтому функциональность вызывается при наведении (а не только при нажатии).
Стандартно отображается желтое окно аннотации, текст которого можно обновить. Вы можете отключить эту аннотацию, если хотите отображать что-либо только в строке состояния.
Приведенный ниже код показывает координаты курсора при наведении курсора близко к кривой. Отображение курсора по умолчанию отключено.
Этот другой пост показывает пример того, как mplcursors может идентифицировать локальный максимум.
from matplotlib import pyplot as plt
import mplcursors
import numpy as np
def show_annotation(sel):
sel.annotation.set_visible(False)
fig.canvas.toolbar.set_message(f'{sel.annotation.xy[0]:.12f};{sel.annotation.xy[1]:.12f}')
fig, ax = plt.subplots()
x = np.linspace(0, 10)
ax.plot(x, np.sin(x))
fig.canvas.mpl_connect("motion_notify_event",
lambda event: fig.canvas.toolbar.set_message(""))
cursor = mplcursors.cursor(hover=True)
cursor.connect("add", show_annotation)
PS: Просто использовать стандартную аннотацию Вы можете написать show_annotation
следующим образом:
def show_annotation(sel):
sel.annotation.set_text(f'x:{sel.annotation.xy[0]:.12f}\ny:{sel.annotation.xy[1]:.12f}')
Кажется, что Mplcursors не показывает аннотации или обновления строки состояния после увеличения в режиме зависания. Установка hover=False
(режим по умолчанию) приведет к тому же поведению, но только после щелчка (или двойного щелчка при увеличении).
from matplotlib import pyplot as plt
import mplcursors
import numpy as np
def show_annotation(sel):
sel.annotation.set_visible(False)
fig.canvas.toolbar.set_message(f'{sel.annotation.xy[0]:.12f};{sel.annotation.xy[1]:.12f}')
fig, ax = plt.subplots()
x = np.linspace(0, 10)
ax.plot(x, np.sin(x))
cursor = mplcursors.cursor(hover=False)
cursor.connect("add", show_annotation)
plt.show()
Чтобы всегда видеть десятичные дроби, независимо от того, чтобы быть рядом с кривой , вы можете попробовать следующее (без mplcursors):
fig.canvas.mpl_connect("motion_notify_event",
lambda event: fig.canvas.toolbar.set_message(f"{event.xdata:.12f};{event.ydata:.12f}"))