Matplotlib Python:如何添加面板按钮

时间:2016-01-07 16:43:45

标签: python matplotlib

我正在使用matplotlib创建一个简单的交互式绘图,用户可以在绘图上放置标记。就此而言,一切正常。

现在我想添加一个按钮,当按下某个功能时会执行。为此,我遵循example。但使用该按钮会导致意外行为。如果包含按钮而不是能够添加标记,则所有标记都放置在按钮区域内,并且不会在图形中显示。哪个没有多大意义。

我正在寻找一种方法来添加一个面板按钮,就像默认情况下在每个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 个答案:

答案 0 :(得分:5)

您需要将这两者分开。

让我们试试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")

现在没关系:)