我正在使用 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")
现在好了:)
