Python matplotlibe代码错误:MaxNLocator似乎没有正确的属性
当我尝试在运行示例脚本时 在伊皮顿,我得到了Python matplotlibe代码错误:MaxNLocator似乎没有正确的属性,python,matplotlib,Python,Matplotlib,当我尝试在运行示例脚本时 在伊皮顿,我得到了 In [1]: %run cmap.py --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) /usr/lib/python2.7/dist-packages/IPython/utils/py3comp
In [1]: %run cmap.py
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
173 else:
174 filename = fname
--> 175 __builtin__.execfile(filename, *where)
/home/qlnr92/Dropbox/bin/cmap.py in <module>()
11 cmap = plt.get_cmap('PiYG')
12
---> 13 levels = MaxNLocator(nbins=15).tick_values(z.min(), z.max())
14 norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)
15
AttributeError: MaxNLocator instance has no attribute 'tick_values'
我对matplotlib还很陌生,所以我不确定我会错在哪里。我很确定所有的包都没有问题,因为如果我注释掉任何包含levels变量的东西,它是tick_values方法的输出被分配到的对象,那么图就会很好地显示出来。然而,我想知道出了什么问题
为了安全起见,这里是我在ipython-pylab中使用的经过轻微编辑的脚本
import matplotlib.pyplot as plt
from matplotlib.colors import BoundaryNorm
from matplotlib.ticker import MaxNLocator
import numpy as np
dx, dy = 0.05, 0.05
y, x = np.mgrid[slice(1, 5 + dy, dy),
slice(1, 5 + dx, dx)]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
z = z[:-1, :-1]
levels = MaxNLocator(nbins=15).tick_values(z.min(), z.max())
cmap = plt.get_cmap('PiYG')
norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)
plt.subplot(2, 1, 1)
im = plt.pcolormesh(x, y, z, cmap=cmap, norm=norm)
plt.colorbar()
plt.axis([x.min(), x.max(), y.min(), y.max()])
plt.title('pcolormesh with levels')
plt.subplot(2, 1, 2)
plt.contourf(x[:-1, :-1] + dx / 2.,
y[:-1, :-1] + dy / 2., z, levels=levels,
cmap=cmap)
plt.colorbar()
plt.title('contourf with levels')
plt.show()
我使用的方法似乎已经被Binu边界方法所取代。勾号值似乎不再存在
参见定位器??MaxNLocator??和其他继承的类文档您使用的是什么版本的mpl?我不能复制这个,这个例子在我的系统上正确运行。不是在正确的atm机上,但它是通过synaptic Ubuntu12.04提供的最新版本,我相信是1.1.1。我明白了,现在它们已经升级到1.3了,所以也许我应该检查一下版本号!
import matplotlib.pyplot as plt
from matplotlib.colors import BoundaryNorm
from matplotlib.ticker import MaxNLocator
import numpy as np
dx, dy = 0.05, 0.05
y, x = np.mgrid[slice(1, 5 + dy, dy),
slice(1, 5 + dx, dx)]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
z = z[:-1, :-1]
levels = MaxNLocator(nbins=15).tick_values(z.min(), z.max())
cmap = plt.get_cmap('PiYG')
norm = BoundaryNorm(levels, ncolors=cmap.N, clip=True)
plt.subplot(2, 1, 1)
im = plt.pcolormesh(x, y, z, cmap=cmap, norm=norm)
plt.colorbar()
plt.axis([x.min(), x.max(), y.min(), y.max()])
plt.title('pcolormesh with levels')
plt.subplot(2, 1, 2)
plt.contourf(x[:-1, :-1] + dx / 2.,
y[:-1, :-1] + dy / 2., z, levels=levels,
cmap=cmap)
plt.colorbar()
plt.title('contourf with levels')
plt.show()