在python中使用matplotlib事件更改现有列表



我正在开发一个程序来识别功率密度频谱中的重要频率。我以自动方式找到了一个重要峰值列表。但是现在我想直观地查看它们并使用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 作用域变量的方式,以及一个类似于你的怪癖。

相关内容

  • 没有找到相关文章

最新更新