2011-06-26 18 views
5

usuarios, Quiero personalizar los tics en una barra de color. Sin embargo, encontré el siguiente comportamiento extraño. Intento cambiar el formador de tics al formador predeterminado (pensé que esto no debería cambiar nada) pero terminé con diferentes etiquetas. ¿Alguien sabe lo que estoy haciendo mal? ¿O es esto un error?python matplotlib colorbar setting tick formator/locator cambios etiquetas

Uso matplotlib de git (v1.0.1-961-gb516ae0, git describe). El siguiente código produce las dos parcelas:

#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() 

Respuesta

15

me acaba de encontrar la solución. Uno tiene que llamar

bar.update_ticks() 

después de los formadores/localizadores están cambiado, ver

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

Entonces todo funciona bien.

Actualización:

Aquí es también el código que cambia el Formador/localizador. Se basa en la estructura interna del código de barra de color, por lo que quizás otra persona tenga una mejor solución:

#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()