Python 如何区分SpanSelector中的左右按钮?
我想使用Python 如何区分SpanSelector中的左右按钮?,python,matplotlib,widget,mouse,interactive,Python,Matplotlib,Widget,Mouse,Interactive,我想使用SpanSelector在绘图中选择两个间隔。为了保存间隔的不同极值,我想使用一个标志,这取决于我是使用右键还是左键选择间隔(这样我可以区分两个想要的间隔) 上述情况是否可能 SpanSelector(..., button=1) 编辑: 更具体地说:我希望在显示绘图后,SpanSelector会绘制一个红色的区域跨度(如果使用左键),如果使用右键,则绘制一个蓝色的区域跨度 例如: 下面的代码允许用户以交互方式选择间隔,然后打印该间隔 import numpy as np impo
SpanSelector
在绘图中选择两个间隔。为了保存间隔的不同极值,我想使用一个标志,这取决于我是使用右键还是左键选择间隔(这样我可以区分两个想要的间隔)
上述情况是否可能
SpanSelector(..., button=1)
编辑: 更具体地说:我希望在显示绘图后,
SpanSelector
会绘制一个红色的区域跨度(如果使用左键),如果使用右键,则绘制一个蓝色的区域跨度
例如: 下面的代码允许用户以交互方式选择间隔,然后打印该间隔
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.widgets as mwidgets
fig = plt.figure()
ax = plt.axes()
x = np.arange(0,2*np.pi)
y = np.sin(x)
ax.plot(x,y)
def onselect(vmin, vmax):
print(vmin, vmax)
span = mwidgets.SpanSelector(ax, onselect, 'horizontal')
plt.show()
我想修改上面的代码,如果间隔是由左按钮绘制的,那么它将打印“left:vimin,vmax”
,如果间隔是由右按钮绘制的,那么它将打印“right:vmin,vmax”
上述情况是否可能
SpanSelector(..., button=1)
将是左侧鼠标按钮和的范围选择器
SpanSelector(..., button=3)
将是右鼠标按钮的范围选择器。我使用
mpl\u connect
解决了这个问题。我没有区分左键和右键,但我让代码以不同的方式处理SpanSelector
输入,这取决于鼠标选择的span之前是enter
按键还是shift+enter
按键。我留下下面的代码,以防对其他人有用
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.widgets as mwidgets
fig = plt.figure()
ax = plt.axes()
x = np.arange(0,2*np.pi)
y = np.sin(x)
ax.plot(x,y)
ax.set_title('[Press \'enter\' and \'shift+enter\' to select the intervals]')
def onselect(vmin, vmax):
if plot_key_input == 'enter':
print('Interval type 1:', vmin, vmax)
if plot_key_input == 'enter+shift':
print('Interval type 2:', vmin, vmax)
# The variable plot_key_input will store the key that is pressed during the plot visualization
plot_key_input = None
# Get the key pressed during the plot visualization
def onPressKey(event):
# Defined as a global variable so it will affect other programs and functions
global plot_key_input
plot_key_input = event.key
# Connect the keys to the function onPressKey during the plot visualization
cid = fig.canvas.mpl_connect('key_press_event', onPressKey)
span = mwidgets.SpanSelector(ax, onselect, 'horizontal')
plt.show()
# Disconnect the keys to the function onPressKey
fig.canvas.mpl_disconnect(cid)
谢谢你的提示。这很有帮助,但我还是没有得到我想要的。为了更精确,我对上面的问题进行了编辑。这个答案建议使用两个span选择器。