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")
Теперь все хорошо:)