我想设置matplotlib颜色条范围。这是我到目前为止所做的:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(20)
y = np.arange(20)
data = x[:-1,None]+y[None,:-1]
fig = plt.gcf()
ax = fig.add_subplot(111)
X,Y = np.meshgrid(x,y)
quadmesh = ax.pcolormesh(X,Y,data)
plt.colorbar(quadmesh)
#RuntimeError: You must first define an image, eg with imshow
#plt.clim(vmin=0,vmax=15)
#AttributeError: 'AxesSubplot' object has no attribute 'clim'
#ax.clim(vmin=0,vmax=15)
#AttributeError: 'AxesSubplot' object has no attribute 'set_clim'
#ax.set_clim(vmin=0,vmax=15)
plt.show()
如何在此处设置颜色条限制?
答案 0 :(得分:24)
精氨酸。这是你尝试的最后一件事:
quadmesh.set_clim(vmin=0, vmax=15)
作品。
答案 1 :(得分:4)
Matplotlib 1.3.1 - 看起来颜色条刻度仅在实例化颜色条时绘制。更改颜色条限制(set_clim)不会导致重新绘制刻度。
我找到的解决方案是在与原始颜色条相同的轴条目中重新实例化颜色条。在这种情况下,轴[1]是原始颜色条。添加了一个新的colorbar实例,其中指定了cax =(子轴)kwarg。
# Reset the Z-axis limits
print "resetting Z-axis plot limits", self.zmin, self.zmax
self.cbar = self.fig.colorbar(CS1, cax=self.fig.axes[1]) # added
self.cbar.set_clim(self.zmin, self.zmax)
self.cbar.draw_all()
答案 2 :(得分:2)
[对不起,实际上是对Virginias回答红色鳄鱼的评论,但没有足够的声誉来评论]
在绘制后,我不得不更新imshow对象的颜色条,并使用imshowobj.set_data()更改数据。 使用cbarobj.set_clim()确实更新颜色,但不更新颜色条的刻度或范围。相反,你必须使用imshowobj.set_clim()来正确更新图像和颜色条。
data = np.cumsum(np.ones((10,15)),0)
imshowobj = plt.imshow(data)
cbarobj = plt.colorbar(imshowobj)
imshowobj.set_data(data/10) #scale is wrong now, shows only dark color
#cbarobj.set_clim(0,1) #! image colors will update, but cbar ticks not
imshowobj.set_clim(0,1) #correct