Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何区分SpanSelector中的左右按钮?_Python_Matplotlib_Widget_Mouse_Interactive - Fatal编程技术网

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选择器。