我正在使用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()
当没有添加按钮时,一切都按预期工作。使用按钮,我只能在按钮区域内放置标记。有什么想法吗?
答案 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")
现在没关系:)