Matplotlib Python: как добавить кнопку панели

Я использую matplotlib для создания простого интерактивного графика, где пользователь сможет размещать маркеры на графике. В этом отношении все работает отлично.

Теперь я хочу добавить кнопку, которая при нажатии будет выполнять определенную функцию. Для этого я последовал этому примеру. Но использование кнопки вызывает неожиданное поведение. При включенной кнопке вместо возможности добавления маркеров все маркеры размещаются внутри области кнопок и вообще не отображаются на графике. Что не имеет особого смысла.

Я ищу способ добавить кнопку панели, как те, которые существуют по умолчанию в каждом окне matplotlib. Есть ли у вас предложения? Любой другой пример, на который я мог бы взглянуть? Я видел много примеров, но мне трудно ориентироваться в документации, чтобы найти именно то, что мне нужно. Заранее спасибо.

Обновить

Код, который я использую сейчас, выглядит следующим образом:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button

dataX = np.array([1,2,3,4,5,6,7,8,9,10])
dataY = np.array([1193,1225,1125,1644,1255,13676,2007,2008,12359,1210])

def on_click(event):
    if event.dblclick:
        plt.plot((event.xdata, event.xdata),(mean-standardDeviation, mean+standardDeviation), 'r-')
        plt.show()

def _yes(event):
    print "yolo"

global mean, standardDeviation

# mean and standard deviation
mean = np.mean(dataY)
standardDeviation = np.std(dataY)

# plot data
plt.plot(dataX, dataY, linewidth=0.5)

plt.connect('button_press_event', on_click)

# button
axcut = plt.axes([0.9, 0.0, 0.1, 0.075])
bcut = Button(axcut, 'YES', color='red', hovercolor='green')
bcut.on_clicked(_yes)

plt.show()

Когда кнопка не добавлена, все работает как положено. С помощью кнопки я могу размещать маркеры только внутри области кнопки. Любая идея?

1 ответ

Решение

Вы должны разделить эти два.

Давай попробуем ничуть subplot:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button

dataX = np.array([1,2,3,4,5,6,7,8,9,10])
dataY = np.array([1193,1225,1125,1644,1255,13676,2007,2008,12359,1210])

ax = plt.subplot(111)
def on_click(event):
    if event.dblclick:
       ax.plot((event.xdata, event.xdata), (mean-standardDeviation, mean+standardDeviation), 'r-')
       plt.show()

def _yes(event):
    print("yolo")

mean = np.mean(dataY)
standardDeviation = np.std(dataY)

ax.plot(dataX, dataY, linewidth=0.5)
plt.connect('button_press_event', on_click)

axcut = plt.axes([0.9, 0.0, 0.1, 0.075])
bcut = Button(axcut, 'YES', color='red', hovercolor='green')
bcut.on_clicked(_yes)

plt.show()

Теперь это должно работать.

Но, если вы случайно дважды нажмете кнопку " Да", на графике будет нарисована линия. Итак, если вы измените действие кнопки на щелчок правой кнопкой мыши:

def _yes(event):
    if event.button == 3:
        print("yolo")

Теперь все хорошо:)

Другие вопросы по тегам