我正在尝试创建一个轮廓图,其中x坐标为标签EF,y标记为EB,z为标记为a的函数。它返回下面发布的长错误。任何帮助,将不胜感激。 错误是
File "contour.py", line 19, in <module>
c = plt.contour(EF,EB,a)
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2016, in contour
ret = ax.contour(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 7326, in contour
return mcontour.QuadContourSet(self, *args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1088, in __init__
ContourSet.__init__(self, ax, *args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 686, in __init__
self._process_args(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1101, in _process_args
x, y, z = self._contour_args(args, kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1148, in _contour_args
x,y,z = self._check_xyz(args[:3], kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/contour.py", line 1180, in _check_xyz
raise TypeError("Input z must be a 2D array.")
TypeError: Input z must be a 2D array.
答案 0 :(得分:8)
错误说明
TypeError: Input z must be a 2D array.
如果查看输入对象的大小:
print EF.shape, EB.shape, a.shape
(51,) (51,) (51,)
你会发现这些是不是 2D数组。您打算使用X
和Y
吗?
当我进行更改
时a = ((1+.5*(np.exp(1.7*X)+np.exp(1.7*Y)+np.exp(1.7*(X+Y))))/(1+np.exp(1.7*X)+np.exp(1.7*Y)+np.exp(1.7*(X+Y))))
c = plt.contour(EF,EB,a,30)
输出
看起来您可能需要调整参数空间,因为所有有趣的内容都在(0,0)
左右。
答案 1 :(得分:4)
您只需使用a
abd X
代替Y
和EF
来创建EB
作为网格网格:
a = ((1+.5*(np.exp(1.7*Y)+np.exp(1.7*X)+np.exp(1.7*(Y+X))))/(1+np.exp(1.7*Y)+np.exp(1.7*X)+np.exp(1.7*(Y+X))))
另一件事,如果你使用copy=False
创建网格网格,它可能会阻止你内存不足:
(X,Y) = np.meshgrid(EF,EB, copy=False)
在这种情况下,它会创建原始1D数组的视图。