Matplotlib Python:如何添加面板按钮

2024-10-01 15:37:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

当按钮没有添加时,一切都按预期工作。有了这个按钮,我只能在按钮的区域内放置标记。知道吗?


Tags: 标记importevent区域绘图plotmatplotlibon
1条回答
网友
1楼 · 发布于 2024-10-01 15:37:14

你得把他们分开。

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

现在没事了:)

相关问题 更多 >

    热门问题