我正在使用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()
未添加按钮时,一切正常。使用按钮,我只能将标记放置在按钮区域内。任何的想法?
您需要将两者分开。
让我们尝试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()
现在应该可以了。
但是,如果您不小心双击yes,它将在图形上画一条线。因此,如果将按钮操作更改为右键单击:
def _yes(event): if event.button == 3: print("yolo")
现在很好:)