2013-03-07 173 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()