Skip to main content
 首页 » 编程设计

python之Matplotlib Python : How to add panel button

2025年05月04日31rubylouvre

我正在使用 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() 

当没有添加按钮时,一切都按预期工作。使用按钮,我只能在按钮区域内放置标记。有什么想法吗?

请您参考如下方法:

你需要将这两者分开。

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

现在好了:)