2013-03-07 176 views
19

我想设置matplotlib颜色条范围。这是我到目前为止有:设置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() 

如何设置的彩条的限制吗?

回答

24

Arg。它总是你最后尝试的东西:

quadmesh.set_clim(vmin=0, vmax=15) 

的作品。

+6

我真的很想深入了解这个API的实际工作原理。如果任何人都可以向我解释为什么'ax.set_xlim'工作,但是'ax.set_clim'不能从API的角度来工作,我很乐意听到(并且我确信其他人可以得到比这更好的答案 - 所以请解释更多,如果你可以!) – mgilson 2013-03-07 21:36:46

+4

我不知道这是否回答你的问题,但如果你看看'quadmesh .__ class __。mro()'你会看到quadmesh的类有'ScalarMappable' mixin 。如果你看看'matplotlib/cm.py',你会发现它是'ScalarMappable' mixin,它处理colormapping,特别是它提供'set_clim'方法。 – unutbu 2013-03-07 22:06:27

+3

每个(ScalarMappable)艺术家都控制自己的颜色。颜色条被附加到一个ScalarMappable(通过'plt.colorbar(quadmesh)'调用)。所以艺术家的色彩映射控制了色条的色彩映射。它不是一个轴全色映射。因此,'ax'没有属性'set_clim'。 – unutbu 2013-03-07 22:10:00

4

Matplotlib 1.3.1 - 它看起来像只在颜色条实例化时绘制颜色条滴答。更改颜色条限制(set_clim)不会导致重新绘制标记。

我找到的解决方案是重新实例化颜色条与原始颜色条在同一个轴条目中。在这种情况下,轴[1]是原始的颜色条。添加了这个用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()