2011-06-26 135 views
5

用戶, 我想定製顏色條上的刻度。但是,我發現了以下奇怪的行爲。我嘗試將刻度格式更改爲默認格式(我認爲這應該不會改變任何內容),但我最終得到了不同的標籤。有人知道我做錯了什麼嗎?或者這是一個錯誤?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

我剛找到解決方案。一個人打電話給

bar.update_ticks() 
的formators後

/定位器改變,見

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

然後一切正常。

更新:

這裏也是這改變了Formator /定位器的代碼。它基於colorbar-code的內部結構,所以也許別人有更好的解決方案:

#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() 
相關問題