Matplotlib получить Yticklabel по щелчку мыши - PullRequest
0 голосов
/ 18 февраля 2019

У меня довольно простая горизонтальная диаграмма.(barh) То, что я пытаюсь сделать, это напечатать этикетку, когда я нажимаю на панель.Это вообще возможно?

Допустим, у меня есть следующий код

import matplotlib.pyplot as plt
import numpy as np

# Fixing random state for reproducibility
np.random.seed(19680801)


plt.rcdefaults()
fig, ax = plt.subplots()

# Example data
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')
y_pos = np.arange(len(people))
performance = 3 + 10 * np.random.rand(len(people))
error = np.random.rand(len(people))

ax.barh(y_pos, performance, xerr=error, align='center',
        color='green', ecolor='black')
ax.set_yticks(y_pos)
ax.set_yticklabels(people)
ax.invert_yaxis()  # labels read top-to-bottom
ax.set_xlabel('Performance')
ax.set_title('How fast do you want to go today?')

plt.show()

Что я хотел бы сделать, это печатать «Джим» всякий раз, когда я нажимаю на стержень ответа на графике.

1 Ответ

0 голосов
/ 18 февраля 2019

Вы хотите определить picker в bar.Затем подключите pick_event к функции, которая находит индекс соответствующего бара в списке предоставленных вами меток.

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

# Example data
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')
y_pos = np.arange(len(people))
performance = 3 + 10 * np.random.rand(len(people))
error = np.random.rand(len(people))

ax.barh(y_pos, performance, xerr=error, align='center',
        color='green', ecolor='black', picker=True)
ax.set_yticks(y_pos)
ax.set_yticklabels(people)
ax.invert_yaxis()  # labels read top-to-bottom
ax.set_xlabel('Performance')
ax.set_title('How fast do you want to go today?')

def onpick(event):
    if isinstance(event.artist, plt.Rectangle):
        y = people[int(np.round(event.artist.get_y()))]
        print(y)

fig.canvas.mpl_connect('pick_event', onpick)

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...