python matlotpib在重复显示曲面时出现递归错误
我使用matplotlib绘制曲面以显示一些三维数据。我使用“下一步”按钮滚动显示新数据的3d数据阵列。在大约43次滚动之后,我得到了一个递归错误,尽管没有明显的递归编程。此处更新了最小可再现示例(该示例不会滚动数据,但仍会再现错误:python matlotpib在重复显示曲面时出现递归错误,python,matplotlib,Python,Matplotlib,我使用matplotlib绘制曲面以显示一些三维数据。我使用“下一步”按钮滚动显示新数据的3d数据阵列。在大约43次滚动之后,我得到了一个递归错误,尽管没有明显的递归编程。此处更新了最小可再现示例(该示例不会滚动数据,但仍会再现错误: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import matplotlib.animation as animation
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation
import matplotlib
from matplotlib import cm
import re
import time
from threading import Thread
from matplotlib.widgets import Button
xsize=34
ysize=22
numDataLines = 0
#I realise the next 2 lines below are wrong but otherwise I get the wrong shape in use in plot_surface and contour3d
X = np.arange(0,ysize, 1)
Y = np.arange(0,xsize, 1)
X,Y = np.meshgrid(X,Y)
currentFrameNumber = 0
zlines = []
zlines.append(np.reshape([0]*xsize*ysize, [xsize, ysize], 'C'))
def display_plot(currentFrameNumber):
Z = zlines[0]
ax.clear()
ax.set_zlim(0.0, 400.0)
print "showing frame number ", currentFrameNumber
ax.plot_surface(X, Y, Z, cmap="magma")
plt.show()
class Index(object):
def next(self, event):
display_plot(0)
fig = plt.figure()
#ax = plt.axes(projection='3d')
ax = fig.add_subplot(111, projection='3d')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z');
callback = Index()
axnext = plt.axes([0.81, 0.05, 0.09, 0.075])
bnext = Button(axnext, '>')
bnext.on_clicked(callback.next)
display_plot(0)
```
我得到这个错误:
Exception in Tkinter callback Traceback (most recent call last): File "C:\Python27\lib\lib-tk\Tkinter.py", line 1541, in __call__
return self.func(*args) File "C:\Python27\lib\lib-tk\Tkinter.py", line 592, in callit
func(*args) File "C:\Python27\lib\site-packages\matplotlib\backends\_backend_tk.py", line 310, in idle_draw
self.draw() File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 12, in draw
super(FigureCanvasTkAgg, self).draw() File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py", line 437, in draw
self.figure.draw(self.renderer) File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs) File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 1493, in draw
renderer, self, artists, self.suppressComposite) File "C:\Python27\lib\site-packages\matplotlib\image.py", line 141, in
_draw_list_compositing_images
a.draw(renderer) File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 298, in draw
ax.draw(renderer) File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axis3d.py", line 230, in draw
majorTicks = self.get_major_ticks() File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axis3d.py", line 148, in get_major_ticks
ticks = maxis.XAxis.get_major_ticks(self, numticks) File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 1396, in get_major_ticks
numticks = len(self.get_major_locator()()) File "C:\Python27\lib\site-packages\matplotlib\ticker.py", line 1954, in
__call__
return self.tick_values(vmin, vmax) File "C:\Python27\lib\site-packages\matplotlib\ticker.py", line 1962, in tick_values
locs = self._raw_ticks(vmin, vmax) File "C:\Python27\lib\site-packages\matplotlib\ticker.py", line 1908, in
_raw_ticks
nbins = np.clip(self.axis.get_tick_space(), File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 2124, in get_tick_space
tick = self._get_tick(True) File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 1792, in
_get_tick
return XTick(self.axes, 0, '', major=major, **tick_kw) File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 176, in
__init__
self.tick1line = self._get_tick1line() File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 474, in
_get_tick1line
markeredgewidth=self._width, zorder=self._zorder) File "C:\Python27\lib\site-packages\matplotlib\lines.py", line 397, in
__init__
self._marker = MarkerStyle(marker, fillstyle) File "C:\Python27\lib\site-packages\matplotlib\markers.py", line 189, in
__init__
self.set_marker(marker) File "C:\Python27\lib\site-packages\matplotlib\markers.py", line 255, in set_marker
elif (isinstance(marker, Sized) and len(marker) in (2, 3) and File "C:\Python27\lib\abc.py", line 132, in __instancecheck__
if subclass is not None and subclass in cls._abc_cache: RuntimeError: maximum recursion depth exceeded Traceback (most recent call last): File "C:\Python27\lib\site-packages\matplotlib\cbook\__init__.py", line 387, in process
proxy(*args, **kwargs) File "C:\Python27\lib\site-packages\matplotlib\cbook\__init__.py", line 227, in __call__
return mtd(*args, **kwargs) File "C:\Python27\lib\site-packages\matplotlib\widgets.py", line 238, in
_motion
self.ax.figure.canvas.draw() File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 12, in draw
super(FigureCanvasTkAgg, self).draw() File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py", line 437, in draw
self.figure.draw(self.renderer) File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs) File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 1493, in draw
renderer, self, artists, self.suppressComposite) File "C:\Python27\lib\site-packages\matplotlib\image.py", line 141, in
_draw_list_compositing_images
a.draw(renderer) File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axes3d.py", line 298, in draw
ax.draw(renderer) File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axis3d.py", line 230, in draw
majorTicks = self.get_major_ticks() File "C:\Python27\lib\site-packages\mpl_toolkits\mplot3d\axis3d.py", line 148, in get_major_ticks
ticks = maxis.XAxis.get_major_ticks(self, numticks) File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 1396, in get_major_ticks
numticks = len(self.get_major_locator()()) File "C:\Python27\lib\site-packages\matplotlib\ticker.py", line 1954, in
__call__
return self.tick_values(vmin, vmax) File "C:\Python27\lib\site-packages\matplotlib\ticker.py", line 1962, in tick_values
locs = self._raw_ticks(vmin, vmax) File "C:\Python27\lib\site-packages\matplotlib\ticker.py", line 1908, in
_raw_ticks
nbins = np.clip(self.axis.get_tick_space(), File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 2124, in get_tick_space
tick = self._get_tick(True) File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 1792, in
_get_tick
return XTick(self.axes, 0, '', major=major, **tick_kw) File "C:\Python27\lib\site-packages\matplotlib\axis.py", line 102, in
__init__
artist.Artist.__init__(self) File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 119, in
__init__
self._sketch = rcParams['path.sketch'] File "C:\Python27\lib\site-packages\matplotlib\__init__.py", line 949, in
__getitem__
val = dict.__getitem__(self, key) RuntimeError: maximum recursion depth exceeded in cmp
如果删除plt.show()命令,则不会得到错误。
我对python有点陌生,所以如果这是显而易见的,我深表歉意。我们需要看到一个完整的回溯。我刚刚更新了一个最小的列表,其中重现了错误