Bor*_*lik 36 python matplotlib
以下代码无法在Python 2.5.4上运行:
from matplotlib import pylab as pl
import numpy as np
data = np.random.rand(6,6)
fig = pl.figure(1)
fig.clf()
ax = fig.add_subplot(1,1,1)
ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
pl.colorbar()
pl.show()
Run Code Online (Sandbox Code Playgroud)
错误消息是
C:\temp>python z.py
Traceback (most recent call last):
File "z.py", line 10, in <module>
pl.colorbar()
File "C:\Python25\lib\site-packages\matplotlib\pyplot.py", line 1369, in colorbar
ret = gcf().colorbar(mappable, cax = cax, ax=ax, **kw)
File "C:\Python25\lib\site-packages\matplotlib\figure.py", line 1046, in colorbar
cb = cbar.Colorbar(cax, mappable, **kw)
File "C:\Python25\lib\site-packages\matplotlib\colorbar.py", line 622, in __init__
mappable.autoscale_None() # Ensure mappable.norm.vmin, vmax
AttributeError: 'NoneType' object has no attribute 'autoscale_None'
Run Code Online (Sandbox Code Playgroud)
如何在此代码中添加colorbar?
以下是口译员信息:
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Run Code Online (Sandbox Code Playgroud)
pel*_*son 72
(这是我知道的一个非常古老的问题)你看到这个问题的原因是因为你把状态机(matplotlib.pyplot)的使用与向轴添加图像的OO方法混合在一起.
该plt.imshow
功能与ax.imshow
方法的区别仅在于一种略有不同的方式.方法ax.imshow
:
功能plt.imshow
:
plt.colorbar
功能自动拾取).如果您希望能够使用该方法plt.colorbar
(在所有情况下除了最极端的情况)ax.imshow
,您需要将返回的图像(这是a的实例ScalarMappable
)plt.colorbar
作为第一个参数传递:
plt.imshow(image_file)
plt.colorbar()
Run Code Online (Sandbox Code Playgroud)
等价(不使用状态机):
img = ax.imshow(image_file)
plt.colorbar(img, ax=ax)
Run Code Online (Sandbox Code Playgroud)
如果ax是pyplot中的当前轴,则不需要kwarg ax=ax
.
Gar*_*err 26
注意:我使用的是python 2.6.2.您的代码引发了同样的错误,以下修改解决了问题.
我阅读了以下colorbar示例:http://matplotlib.sourceforge.net/examples/pylab_examples/colorbar_tick_labelling_demo.html
from matplotlib import pylab as pl
import numpy as np
data = np.random.rand(6,6)
fig = pl.figure(1)
fig.clf()
ax = fig.add_subplot(1,1,1)
img = ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
fig.colorbar(img)
pl.show()
Run Code Online (Sandbox Code Playgroud)
不确定为什么你的例子不起作用.我对matplotlib并不熟悉.