matplotlib等高线图;'module'对象没有属性'nextafter

1 投票
1 回答
5678 浏览
提问于 2025-04-17 12:36

我在尝试复现这个问题时,发现我连最简单的轮廓图都画不出来。

这里有一个简化版的(希望能相关)例子,来自这个画廊

#!/usr/bin/env python
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
#Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)   
#Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * np.exp(X-Y)  #(Z2 - Z1)

plt.figure()
CS = plt.contour(X,Y,Z)

plt.show()

运行后我得到了这个:

Traceback (most recent call last):
  File "./contour.py", line 19, in <module>
    CS = plt.contour(X,Y,Z)
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/pyplot.py", line 2188, in contour
    ret = ax.contour(*args, **kwargs)
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/axes.py", line 7316, in contour
    return mcontour.QuadContourSet(self, *args, **kwargs)
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/contour.py", line 1106, in __init__
    ContourSet.__init__(self, ax, *args, **kwargs)
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/contour.py", line 720, in __init__
    self._process_colors()
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/contour.py", line 954, in _process_colors
    self.set_clim(self.vmin, self.vmax)
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/cm.py", line 248, in set_clim
    self.changed()
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/contour.py", line 841, in changed
    self.to_rgba(self.cvalues, alpha=self.alpha)]
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/cm.py", line 214, in to_rgba
    x = self.cmap(x, alpha=alpha, bytes=bytes)
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/colors.py", line 520, in __call__
    cbook._putmask(xa, xa==1.0, np.nextafter(xa.dtype.type(1),
AttributeError: 'module' object has no attribute 'nextafter'

出现的错误和我是否使用原来的“高斯差分”没关系,或者只是尝试画一个指数函数,像上面的代码片段那样。

我是不是漏掉了什么简单的东西?

如果有帮助的话,我在Ubuntu 10.04上使用的是matplotlib 1.1.0

1 个回答

2

你没有做错什么。你需要升级一下Numpy。我之前也遇到过同样的问题,升级到Numpy 1.6.1后,一切就顺利了。

如果你使用的是Lucid Lynx(Ubuntu 10.04),你可以找到 numpy 1.3.0。而缺少的 nextafter 函数只有在 numpy 1.4 及以上版本中才有(感谢 DSM 的帮助)。

撰写回答