2011-06-26 67 views
5

users カラーバーのティックをカスタマイズしたいと思います。しかし、私は次の奇妙な動作を見つけました。私はデフォルトのformator(私はこれは何も変わらないはずだと思った)にチックformatorを変更しようとするが、私は別のラベルで終わる。誰かが私が間違っていることを知っていますか?それともバグですか?python matplotlibカラーバーの設定ティックフォーメーション/ロケータの変更ティックラベル

git(v1.0.1-961-gb516ae0、git describe)のmatplotlibを使用します。

#http://matplotlib.sourceforge.net/examples/pylab_examples/griddata_demo.html 
from numpy.random import uniform, seed 
from matplotlib.mlab import griddata 
import matplotlib.pyplot as plt 
import matplotlib.ticker 
import numpy as np 
# make up data. 
seed(0) 
npts = 200 
x = uniform(-2,2,npts) 
y = uniform(-2,2,npts) 
z = x*np.exp(-x**2-y**2) 
# define grid 
xi = np.linspace(-2.1,2.1,100) 
yi = np.linspace(-2.1,2.1,200) 
# grid the data. 
zi = griddata(x,y,z,xi,yi,interp='linear') 

##### FIRST PLOT 
plt.figure() 
CS = plt.contour(xi,yi,zi,25,cmap=plt.cm.jet) 
bar = plt.colorbar() # draw colorbar 
# plot data points. 
#plt.scatter(x,y,marker='o',c='b',s=5,zorder=10) 
plt.xlim(-2,2) 
plt.ylim(-2,2) 
plt.title('griddata test (%d points)' % npts) 
plt.show() 

##### SECOND PLOT 
plt.figure() 
CS = plt.contour(xi,yi,zi,25,cmap=plt.cm.jet) 
bar = plt.colorbar() # draw colorbar 
bar.ax.yaxis.set_minor_locator(matplotlib.ticker.AutoLocator()) 
bar.ax.yaxis.set_major_locator(matplotlib.ticker.AutoLocator()) 
# plot data points. 
#plt.scatter(x,y,marker='o',c='b',s=5,zorder=10) 
plt.xlim(-2,2) 
plt.ylim(-2,2) 
plt.title('griddata test (%d points)' % npts) 
plt.show() 

答えて

15

私は解決策を見つけた: 次のコードは、2つのプロットを生成します。一つはformators /ロケータが変更された後に続いて、すべてがうまく動作し

http://matplotlib.sourceforge.net/api/colorbar_api.html

を参照してください、

bar.update_ticks() 

を呼び出す必要があります。

更新:

これは、Formator/Locatorを変更するコードです。これはカラーバーコードの内部構造に基づいているため、他の誰かがより良い解決策を持っている可能性があります。

#http://matplotlib.sourceforge.net/examples/pylab_examples/griddata_demo.html 
from numpy.random import uniform, seed 
from matplotlib.mlab import griddata 
import matplotlib.pyplot as plt 
import matplotlib.ticker 
import numpy as np 
# make up data. 
seed(0) 
npts = 200 
x = uniform(-2,2,npts) 
y = uniform(-2,2,npts) 
z = x*np.exp(-x**2-y**2) 
# define grid 
xi = np.linspace(-2.1,2.1,100) 
yi = np.linspace(-2.1,2.1,200) 
# grid the data. 
zi = griddata(x,y,z,xi,yi,interp='linear') 

##### PLOT 
plt.figure() 
CS = plt.contour(xi,yi,zi,25,cmap=plt.cm.jet) 
bar = plt.colorbar(orientation='horizontal') # draw colorbar 


tick_locs = [-3.9e-1,-2.6e-1,-1.3e-1,0e-1,1.3e-1,2.6e-1,3.9e-1] 
tick_labels = ['-0.390','-0.260','-0.130','0','0.13','0.26','0.390'] 


bar.locator  = matplotlib.ticker.FixedLocator(tick_locs) 
bar.formatter = matplotlib.ticker.FixedFormatter(tick_labels) 
bar.update_ticks() 

# plot data points. 
#plt.scatter(x,y,marker='o',c='b',s=5,zorder=10) 
plt.xlim(-2,2) 
plt.ylim(-2,2) 
plt.title('griddata test (%d points)' % npts) 
plt.show() 
関連する問題