2011-07-16 18 views
11

Ci sono molte domande colorbar matplotlib sullo stack overflow, ma non riesco a capirne il senso per risolvere il mio problema.Come aggiungere Matplotlib Colorbar Ticks

Come impostare gli yticklabels sulla barra dei colori?

Ecco qualche esempio di codice:

from pylab import * 
from matplotlib.colors import LogNorm 
import matplotlib.pyplot as plt 

f = np.arange(0,101)     # frequency 
t = np.arange(11,245)    # time 
z = 20*np.sin(f**0.56)+22   # function 
z = np.reshape(z,(1,max(f.shape))) # reshape the function 
Z = z*np.ones((max(t.shape),1))  # make the single vector to a mxn matrix 
T, F = meshgrid(f,t) 
fig = plt.figure() 
ax = fig.add_subplot(111) 
plt.pcolor(F,T,Z, norm=LogNorm(vmin=z.min(),vmax=z.max())) 
plt.xlim((t.min(),t.max())) 
mn=int(np.floor(Z.min()))  # colorbar min value 
mx=int(np.ceil(Z.max()))   # colorbar max value 
md=(mx-mn)/2      # colorbar midpoint value 
cbar=plt.colorbar()    # the mystery step ??????????? 
cbar.set_yticklabels([mn,md,mx]) # add the labels 
plt.show() 
+0

Sto usando eclipse con pydev ea volte ho semplicemente incollato il codice nella riga di comando di python. Non sono esattamente sicuro di quello che stai suggerendo, ma cercherò di farlo perché sembra utile. – sequoia

+0

grazie, un buon consiglio per vedere quali metodi sono disponibili in futuro. – sequoia

risposta

19

Aggiornare le zecche e le etichette delle tacche:

cbar.set_ticks([mn,md,mx]) 
cbar.set_ticklabels([mn,md,mx]) 
+0

Grazie. Questo funziona. – sequoia

+0

Come mai i miei ticks 'mx' sono gli unici a non essere visualizzati nella barra dei colori? Come può accadere? – FaCoffee

5

Un esempio di lavoro (per qualsiasi campo di valori) con cinque zecche lungo la barra è:

m0=int(np.floor(field.min()))   # colorbar min value 
m4=int(np.ceil(field.max()))    # colorbar max value 
m1=int(1*(m4-m0)/4.0 + m0)    # colorbar mid value 1 
m2=int(2*(m4-m0)/4.0 + m0)    # colorbar mid value 2 
m3=int(3*(m4-m0)/4.0 + m0)    # colorbar mid value 3 
cbar.set_ticks([m0,m1,m2,m3,m4]) 
cbar.set_ticklabels([m0,m1,m2,m3,m4]) 
1

treenick risposta mi ha avviato ma se la barra di colore è ridimensionata tra 0 e 1, quel codice non traccerà il grafico zecche se il fields non viene scalato tra 0 e 1. Così, invece ho usato

m0=int(np.floor(field.min()))   # colorbar min value 
m4=int(np.ceil(field.max()))    # colorbar max value 
num_ticks = 10 
# to get ticks 
ticks = np.linspace(0, 1, num_ticks) 
# get labels 
labels = np.linspace(m0, m1, num_ticks) 

se si vuole distanziati etichette che si possono fare lista python indicizzazione in questo modo: assumendo saltare ogni altro zecche

ticks = ticks[::2] 
labels = labels[::2] 
Problemi correlati