2013-03-07 411 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

+4

これがあなたの質問に答えるかどうかは分かりませんが、 'quadmesh .__ class __。mro()'を見ると、quadmeshのクラスに 'ScalarMappable' mixin 。 'matplotlib/cm.py'を見ると、それはカラーマッピングを扱う' ScalarMappable' mixinであり、特に 'set_clim'メソッドを提供しています。 – unutbu

+3

各(ScalarMappable)アーティストが独自の色を制御します。カラーバーは1つのScalarMappable( 'plt.colorbar(quadmesh)'コールによって)に添付されています。したがって、アーティストのカラーマップは、カラーバーのカラーマッピングを制御します。 Axes全体のカラーマップではありません。したがって、 'ax'は' set_clim '属性にはなりません。 – unutbu

4

Matplotlib 1.3.1 - カラーバーのティックは、カラーバーがインスタンス化されたときにのみ描画されるようです。カラーバーの制限(set_clim)を変更しても、ティックは再描画されません。

私が見つけた解決策は、元のカラーバーと同じ軸の項目でカラーバーを再インスタンス化することでした。この場合、axes [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() 
関連する問題