Python 在matplotlib中添加颜色栏时出现AttributeError
以下代码无法在Python 2.5.4上运行:Python 在matplotlib中添加颜色栏时出现AttributeError,python,matplotlib,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()
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()
错误消息是
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'
注意:我使用的是python 2.6.2。您的代码也出现了同样的错误,下面的修改解决了这个问题 我阅读了以下颜色栏示例:
不知道你的例子为什么不起作用。我对matplotlib不太熟悉。注意:我使用的是python 2.6.2。您的代码也出现了同样的错误,下面的修改解决了这个问题 我阅读了以下颜色栏示例: 不知道你的例子为什么不起作用。我对matplotlib不太熟悉。(我知道这是一个非常古老的问题)您之所以看到这个问题,是因为您将状态机(matplotlib.pyplot)的使用与向轴添加图像的OO方法混合在一起
plt.imshow
函数与ax.imshow
方法只有一个细微的不同。
方法ax.imshow
:
- 创建并返回已添加到轴的图像
plt.imshow
:
- 创建并返回已添加到当前轴的图像,并将图像设置为“当前”图像/可映射图像(然后可由
功能自动拾取)plt.colorbar
ax.imshow
方法使用plt.colorbar
(除最极端的情况外,其他情况都可以),则需要将返回的图像(这是ScalarMappable
的实例)作为第一个参数传递给plt.colorbar
:
plt.imshow(image_file)
plt.colorbar()
等同于(不使用状态机)以下各项:
如果ax是pyplot中的当前轴,那么kwargax=ax
就不需要了。(我知道这是一个非常老的问题)您看到这个问题的原因是因为您将状态机(matplotlib.pyplot)的使用与向轴添加图像的OO方法混合在一起
plt.imshow
函数与ax.imshow
方法只有一个细微的不同。
方法ax.imshow
:
- 创建并返回已添加到轴的图像
plt.imshow
:
- 创建并返回已添加到当前轴的图像,并将图像设置为“当前”图像/可映射图像(然后可由
功能自动拾取)plt.colorbar
ax.imshow
方法使用plt.colorbar
(除最极端的情况外,其他情况都可以),则需要将返回的图像(这是ScalarMappable
的实例)作为第一个参数传递给plt.colorbar
:
plt.imshow(image_file)
plt.colorbar()
等同于(不使用状态机)以下各项:
如果ax是pyplot中的当前轴,则不需要kwarg
ax=ax
。在代码中添加/编辑以下行
plot = ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
pl.colorbar(plot)
在代码中添加/编辑以下行
plot = ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
pl.colorbar(plot)
我在一个教程中找到了这个问题的另一个解决方案 下面的代码适用于plt.imshow()方法:
它可能无法与其他打印方法配合使用。例如,它不适用于Geopandas Geodataframe plot。我在教程中找到了解决此问题的另一种方法 下面的代码适用于plt.imshow()方法:
它可能无法与其他打印方法配合使用。例如,它不适用于Geopandas Geodataframe plot。是否有办法从Axis对象本身访问图像?假设您正在编写一个函数,该函数传递了一个Axis对象,该对象已经打印了一个图像,并且您希望您的函数添加一个颜色条。我想做一些类似plt.colorbar(ax.image,ax=ax)的事情。您可以使用轴上的
images
属性来获取轴内的图像列表。或者,轴上的“活动”图像可用gci
(从内存中)。通过fig.colorbar()
,更改plt.colorbar()
是否也可以工作?是否有方法从轴对象本身访问图像?假设您正在编写一个函数,该函数传递了一个Axis对象,该对象已经打印了一个图像,并且您希望您的函数添加一个颜色条。我想做一些类似plt.colorbar(ax.image,ax=ax)的事情。您可以使用轴上的images
属性来获取轴内的图像列表。或者,轴上的“活动”图像可用gci
(从内存中)。通过fig.colorbar()
更改plt.colorbar()
,它是否也可以工作?不回答问题question@invictus答案与加里给出的类似。如果您付出一些努力,尝试使用我所写的内容编辑代码,那么它的回答会令人满意。提问者的代码不起作用,因为pl.colorbar()被赋予了错误的绘图实例默认情况下,代码中定义的ax'是一个窗口实例。pl.colorbar()必须定向到绘图实例。在我的例子中,“plot”是需要提供给pl.colorbar()的内容,它类似于Garydoesn提供的“cax”,但没有回答这个问题question@invictus答案与加里给出的类似。如果您付出一些努力,尝试使用我所写的内容编辑代码,那么它的回答会令人满意。提问者的代码不起作用,因为pl.colorbar()被赋予了错误的绘图实例默认情况下,代码中定义的ax'是一个窗口实例。pl.colorbar()必须定向到绘图实例。在我的例子中,“plot”是需要提供给pl.colorbar()的内容,它类似于Garysence提供的“cax”。如果您提到一个外部源(教程),包含一个指向该源的链接将非常有用。ax。figure
是一个非常值得了解的工具。它允许很多功能,而无需将fig直接传递给功能
plot = ax.imshow(data, interpolation='nearest', vmin=0.5, vmax=0.99)
pl.colorbar(plot)
def colorbar(Mappable, Orientation='vertical', Extend='both'):
Ax = Mappable.axes
fig = Ax.figure
divider = make_axes_locatable(Ax)
Cax = divider.append_axes("right", size="5%", pad=0.05)
return fig.colorbar(
mappable=Mappable,
cax=Cax,
use_gridspec=True,
extend=Extend, # mostra um colorbar full resolution de z
orientation=Orientation
)
fig, ax = plt.subplots(ncols=2)
img1 = ax[0].imshow(data)
colorbar(img1)
img2 = ax[1].imshow(-data)
colorbar(img2)
fig.tight_layout(h_pad=1)
plt.show()