Как увеличить количество отображаемых координат x и y? - PullRequest
1 голос
/ 18 апреля 2020

Используя %matplotlib notebook в matplotlib, мы получаем график

plot

Как увеличить количество цифр после десятичной точки в x и y координаты, отображаемые после наведения моей мыши на график?

И спасибо.

1 Ответ

1 голос
/ 19 апреля 2020

Вот минимальный пример использования 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}"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...