显示连续图时的Matplotlib递归错误

时间:2018-03-21 13:23:35

标签: python matplotlib

我有一个包含大约3000个项目的列表(每个项目都是10个点的列表)。一个项目可能如下所示:

[['-19.05364812189936' '-8.078571934798015']
 ['-4.481956059532247' '10.88512402551382']
 ['-15.985506732813608' '-19.92397590361446']
 ['-1.2933416017009214' '-10.233128986534373']
 ['-19.640113394755492' '2.7974946846208364']
 ['-9.466119773210488' '1.8171420978029766']
 ['4.998052799433026' '-0.5782990786676117']
 ['-7.883010276399716' '-9.731805457122608']
 ['-2.754521615875266' '-18.244450744153085']
 ['-17.105912473423103' '13.09440644932672']
 ['right' '0']]

我最终想要的是绘制第一个项目,进行一些用户交互(为绘制的点指定标签),确认(保存到另一个列表:10个点+标签)并绘制下一个项目,依此类推。

这是我目前的代码:

import numpy as np
import Utils as utils
import matplotlib.pyplot as plt

methods = utils.ClusteringMethods()
db = utils.DbConnection()

formations = methods.readFromDump('testNewInterval')

formation_list = []
formation_list.append('5-3-2')
formation_list.append('4-4-2')
formation_list.append('4-3-3')

labelled_formations = []

def add_formation_def():
    name = input('Please specify formation')
    if(name not in formation_list):
        formation_list.append(name)
    else:
        print('Already there, please try again')

def showOptionList():
    for idx, item in enumerate(formation_list):
        print(idx, '  -  ', item)

def getCurrentFormation(index):
    return formations[index]

def showClearPlot():
    ax1.clear()
    ax1.imshow(im, extent=[-55, 55, -35, 35], aspect='auto')

def nextPlot():
    print('in next plot..')
    global currentIndex
    global currentFormation
    currentIndex = currentIndex +1
    ax1.clear()
    ax1.imshow(im, extent=[-55, 55, -35, 35], aspect='auto')

    currentFormation = getCurrentFormation(currentIndex)

    showPlot(currentFormation)

def showPlot(currentFormation):
    orientation = currentFormation[-1][0]
    print('orientation: ', orientation)
    currentFormation = currentFormation[:-1]

    for point in currentFormation:
        ax1.plot(float(point[0]), float(point[1]), '.', markersize=14, mfc='darkgreen', mec='k')

    plt.show()


def on_key(event):
    print('key: ', event.key)

    if (event.key == ' '):
        showOptionList()

    if (event.key == 'f1'):
        add_formation_def()

    if(event.key == 'f2'):
        nextPlot()

#Initialize Pitch
fig = plt.figure(figsize=(11,6))
ax1 = fig.add_subplot(111)
im = plt.imread('field.png')
ax1.imshow(im, extent=[-55, 55, -35, 35], aspect='auto')

#register events
cid = fig.canvas.mpl_connect('key_press_event', on_key)

currentIndex = 0
currentFormation = formations[currentIndex]

showPlot(currentFormation)

它适用于一些项目,但最终我收到以下错误:

RecursionError: maximum recursion depth exceeded while calling a Python object

编辑:完整的堆栈跟踪:

Traceback (most recent call last):
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 388, in process
    proxy(*args, **kwargs)
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 228, in __call__
    return mtd(*args, **kwargs)
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 67, in on_key
    nextPlot()
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 40, in nextPlot
    ax1.clear()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axes\_base.py", line 1116, in clear
    self.cla()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axes\_base.py", line 982, in cla
    spine.cla()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\spines.py", line 183, in cla
    self.axis.cla()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 773, in cla
    self.reset_ticks()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 787, in reset_ticks
    self.majorTicks.extend([self._get_tick(major=True)])
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 2097, in _get_tick
    return YTick(self.axes, 0, '', major=major, **tick_kw)
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 154, in __init__
    self.tick1line = self._get_tick1line()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 569, in _get_tick1line
    l.set_transform(self.axes.get_yaxis_transform(which='tick1'))
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axes\_base.py", line 779, in get_yaxis_transform
    return self.spines['left'].get_spine_transform()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\spines.py", line 442, in get_spine_transform
    self._ensure_position_is_set()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\spines.py", line 165, in _ensure_position_is_set
    self.set_position(self._position)
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\spines.py", line 432, in set_position
    self.axis.reset_ticks()
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 787, in reset_ticks
    self.majorTicks.extend([self._get_tick(major=True)])
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 2097, in _get_tick
    return YTick(self.axes, 0, '', major=major, **tick_kw)
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 152, in __init__
    self.apply_tickdir(tickdir)
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 525, in apply_tickdir
    self.stale = True
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\artist.py", line 241, in stale
    self.stale_callback(self, val)
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\artist.py", line 68, in _stale_axes_callback
    self.axes.stale = val
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\artist.py", line 241, in stale
    self.stale_callback(self, val)
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\figure.py", line 56, in _stale_figure_callback
    self.figure.stale = val
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\artist.py", line 241, in stale
    self.stale_callback(self, val)
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\pyplot.py", line 582, in _auto_draw_if_interactive
    if val and matplotlib.is_interactive() and not fig.canvas.is_saving():
RecursionError: maximum recursion depth exceeded

Current thread 0x00003ab4 (most recent call first):
  File "C:\ProgramData\Anaconda3\lib\abc.py", line 182 in __instancecheck__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\markers.py", line 255 in set_marker
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\markers.py", line 189 in __init__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\lines.py", line 402 in __init__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 568 in _get_tick1line
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 154 in __init__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 2097 in _get_tick
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 787 in reset_ticks
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\spines.py", line 432 in set_position
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\spines.py", line 165 in _ensure_position_is_set
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\spines.py", line 442 in get_spine_transform
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axes\_base.py", line 779 in get_yaxis_transform
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 569 in _get_tick1line
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 154 in __init__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 2097 in _get_tick
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 787 in reset_ticks
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axis.py", line 773 in cla
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\spines.py", line 183 in cla
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axes\_base.py", line 982 in cla
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\axes\_base.py", line 1116 in clear
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 40 in nextPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 67 in on_key
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 228 in __call__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 388 in process
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 1880 in key_press_event
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 441 in key_press
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699 in __call__
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 557 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1078 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 218 in show
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\pyplot.py", line 254 in show
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 55 in showPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 45 in nextPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 67 in on_key
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 228 in __call__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 388 in process
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 1880 in key_press_event
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 441 in key_press
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699 in __call__
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 557 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1078 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 218 in show
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\pyplot.py", line 254 in show
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 55 in showPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 45 in nextPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 67 in on_key
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 228 in __call__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 388 in process
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 1880 in key_press_event
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 441 in key_press
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699 in __call__
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 557 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1078 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 218 in show
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\pyplot.py", line 254 in show
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 55 in showPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 45 in nextPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 67 in on_key
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 228 in __call__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 388 in process
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 1880 in key_press_event
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 441 in key_press
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699 in __call__
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 557 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1078 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 218 in show
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\pyplot.py", line 254 in show
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 55 in showPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 45 in nextPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 67 in on_key
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 228 in __call__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 388 in process
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 1880 in key_press_event
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 441 in key_press
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699 in __call__
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 557 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1078 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 218 in show
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\pyplot.py", line 254 in show
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 55 in showPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 45 in nextPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 67 in on_key
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 228 in __call__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 388 in process
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 1880 in key_press_event
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 441 in key_press
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699 in __call__
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 557 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 1078 in mainloop
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 218 in show
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\pyplot.py", line 254 in show
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 55 in showPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 45 in nextPlot
  File "C:/Users/D071947/PycharmProjects/Formation/LabelFormations.py", line 67 in on_key
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 228 in __call__
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\cbook\__init__.py", line 388 in process
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backend_bases.py", line 1880 in key_press_event
  File "C:\Users\D071947\PycharmProjects\Formation\venv\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 441 in key_press
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699 in __call__
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 557 in mainloop
  ...

我猜它是因为广泛使用

plt.show()
showplot()中的

我还阅读了很多关于使用交互模式(ion())并将.show()替换为.draw()的内容,这对我来说并不合适,因为它不会显示任何情节。

0 个答案:

没有答案