使用matplotlib的pcolor时出错
我刚开始学习Python。我想用matplotlib里的pcolor函数来处理gridx、gridy和V,它们的大小都是401x121。函数代码如下:
def plotSpatialKM(V,gridx,gridy,step_h):
plt.figure(figsize=(18,8), dpi=80, facecolor='white')
plt.pcolor(gridx,gridy,V)
plt.colorbar()
plt.xlim(gridx.min(), gridx.max())
plt.ylim(gridy.min(), gridy.max())
plt.xlabel('x/h',fontsize=FONTSIZE)
plt.ylabel('y/h',fontsize=FONTSIZE)
plt.xticks(fontsize=FONTSIZE)
plt.yticks(fontsize=FONTSIZE)
plt.show()
return(1)
但是每次运行时,都会出现以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
return self.func(*args)
File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 276, in resize
self.show()
File "C:\Python27\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 348, in draw
FigureCanvasAgg.draw(self)
File "C:\Python27\lib\site-packages\matplotlib\backends\backend_agg.py", line 439, in draw
self.figure.draw(self.renderer)
File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 54, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\figure.py", line 999, in draw
func(*args)
File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 54, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 2086, in draw
a.draw(renderer)
File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 54, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\collections.py", line 755, in draw
return Collection.draw(self, renderer)
File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 54, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "C:\Python27\lib\site-packages\matplotlib\collections.py", line 244, in draw
self.update_scalarmappable()
File "C:\Python27\lib\site-packages\matplotlib\collections.py", line 609, in update_scalarmappable
raise ValueError('Collections can only map rank 1 arrays')
ValueError: Collections can only map rank 1 arrays
请帮帮我!
1 个回答
1
我在使用np.matrix的时候也遇到了同样的错误。
import matplotlib.pyplot as plt
import numpy as np
A = np.random.random([8, 8])
plt.colormesh(A) # no error
M = np.matrix(A)
plt.colormesh(M) # the same error
numpy的矩阵和ndarray(另一种数据结构)完全不一样(比如说,all(M[0][0][0][0][0] == M[0])
这个表达式的结果是True
,即使M.ndim == 2
)。而matplotlib在处理这些时并没有考虑到这一点……你只需要从矩阵创建一个ndarray就可以了:
plt.colormesh(np.array(M)) # no error