【问题标题】:Long error in contour plot python等高线图python中的长错误
【发布时间】:2013-08-26 18:27:54
【问题描述】:

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

【问题讨论】:

  • 我不是在半小时前回答过这段代码吗?
  • @Jblasco:如果这是一个重复的问题,为什么不直接标记它,或者至少给出一个链接。
  • tom10,我没有将其标记为重复,因为我认为它不是。我记得代码,而不是问题,并且链接似乎消失了。我猜它只是出于某种原因被删除了。
  • 上一篇文章中的错误类似于matplotlib.contour 引发错误的原因。这是因为它应该是matplotlib.pyplot.contour。我想一旦 OP 意识到这个错误有多简单,他就会自行删除帖子。
  • 没关系,真的,不应该提出这个问题;)。

标签: python numpy matplotlib plot contour


【解决方案1】:

错误表明

TypeError: Input z must be a 2D array. 

如果您查看输入对象的大小:

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

您会发现这些不是二维数组。您打算改用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)

输出是

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

【讨论】:

  • 是的,正是我在寻找的东西。谢谢!!
  • 没问题,欢迎来到 Stack Overflow!如果他们解决了您的问题,请务必为好的答案投票并标记为接受。
【解决方案2】:

您只需将a 创建为网格,使用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 创建网格网格,它可能会阻止您耗尽内存:

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

在这种情况下,它会创建原始一维数组的视图。

【讨论】:

  • 关于copy=False 的好点子,我什至不知道这是可能的!结合meshgrid 创建多维数组 (d>2) 的新能力,我可以替换大量辅助函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 2017-09-18
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
相关资源
最近更新 更多