首页 文章

等高线图python中的长错误

提问于
浏览
3

我正在尝试创建一个轮廓图,其中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.

2 回答

  • 8

    错误说明了这一点

    TypeError: Input z must be a 2D array.
    

    如果你看一下输入对象的大小:

    print EF.shape, EB.shape, a.shape
    (51,) (51,) (51,)
    

    你会看到这些是 not 二维数组 . 您打算使用 XY 吗?

    当我做出改变时

    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)
    

    输出是

    enter image description here

    看起来您可能需要调整参数空间,因为所有有趣的东西都在 (0,0) 左右 .

  • 4

    你只需创建 a 作为meshgrid,使用 X abd Y 而不是 EFEB

    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 创建你的meshgrids它可能会阻止你的内存不足:

    (X,Y) = np.meshgrid(EF,EB, copy=False)
    

    在这种情况下,它会创建原始1D阵列的视图 .

相关问题