我正在开发一个程序来识别功率密度频谱中的重要频率。我以自动方式找到了一个重要峰值列表。但是现在我想直观地查看它们并使用fig.canvas.mpl_connect('key_press_event',ontype)(http://matplotlib.org/users/event_handling.html)从绘图中添加/删除峰值
由于我想添加多个峰,我想更新使用的列表。虽然我收到一个 UnboundLocalError:在分配错误之前引用的局部变量"频率列表"。
def interactiveMethod(frequency,PDS, frequencyLIST,figureName):
#frequency and PDS is the input list of data, frequencyLIST is my found list of
#frequencies and figureName is the figure I previously made which I want to use the
#event on.
def ontype(event):
if event.key == 'a':
#Getting the event xdata
x = event.xdata
frequencyCut = frequency[np.where((frequency > x - 2) & (frequency < x + 2))]
PDSCut = PDS[np.where((frequency > x - 2) & (frequency < x + 2))]
#Find the maximum PDS, as this corresponds to a peak
PDSMax = np.max(PDSCut)
frequencyMax = frequencyCut[np.where(PDSCut == PDSMax)][0]
#Updating the new list using the found frequency
frequencyLIST = np.append(frequencyLIST,frequencyMax)
figureName.canvas.mpl_connect('key_press_event',ontype)
我不知道我应该把这个频率列表放在哪里,以便我可以更新它。
蟒蛇版本:2.7.3 32位
Matplotlib 版本:1.3.0
数字版本:1.7.1
乌班图13.1
我也有天篷(不确定哪个版本)
您将frequencyLIST
变量传递给最外层的方法 ( interactiveMethod
),而不是传递给内部方法 ( ontype
)。快速解决方法是将以下行添加到内部方法:
def ontype(event):
global frequencyLIST
# ... following lines unaltered ...
你可以在这个堆栈溢出问题中阅读更多关于 Python 作用域变量的方式,以及一个类似于你的怪癖。