2013-10-07 13 views
5

Ho una barra di colore con valori positivi e negativi che vengono generati automaticamente (non li sto impostando). Sfortunatamente il segno meno rompe l'allineamento verticale del testo. Come posso allineare tutto il testo nei ticklabels a destra o in alternativa inserire uno spazio prima dei miei numeri positivi per farlo sembrare bello?Allinea ticklabels in colorbar matplotlib

enter image description here

+0

io non so come mi è mancata questa domanda finora, I' ho accuratamente cercato qualcosa di simile più volte. Apparentemente una cosa così semplice e naturale che vogliamo fare ... Questo ha bisogno di più upvotes;) –

risposta

2

Stavo per fare la stessa domanda, poi finalmente trovato la vostra. Quindi mi piacerebbe aggiungere il mio work-around.

All'inizio ho utilizzato la stessa identica soluzione given by Rutger Kassies. Tuttavia, quando si esegue il plottaggio in ipython, la stessa quantità di spostamento nella posizione x darà risultati molto diversi quando si visualizza una piccola finestra o si imposta la figura a schermo intero.

Alla fine ho deciso di impostare lo pad delle etichette di graduazione della barra di colore. Prestito Palesemente rubare il codice di esempio di Rutger:

a = np.random.randn(10,10) 

fig, ax = plt.subplots() 

im = ax.imshow(a, interpolation='none') 
cb = plt.colorbar(im) 

ticklabs = cb.ax.get_yticklabels() 
cb.ax.set_yticklabels(ticklabs,ha='right') 
cb.ax.yaxis.set_tick_params(pad=45) # your number may vary 

Questa soluzione sembra dare un risultato molto più consistente quando si utilizza in vari formati e aspetti della finestra.

Ecco 4 uscite per dimostrare cosa intendo: la riga superiore è la soluzione di cambio di posizione, la riga inferiore è la soluzione di riempimento. Sulla sinistra sono le dimensioni delle finestre figura di default, il lato destro è stato savefig GED dopo schioccare la finestra cifra a schermo intero:

top row older solution, bottom row is mine

4

È possibile modificare l'allineamento del testo. Potrebbe essere necessario modificare leggermente la posizione (x) dell'etichetta per evitare sovrapposizioni con la barra colorata stessa.

a = np.random.randn(10,10) 

fig, ax = plt.subplots() 

im = ax.imshow(a, interpolation='none') 
cb = plt.colorbar(im) 

for t in cb.ax.get_yticklabels(): 
    t.set_horizontalalignment('right') 
    t.set_x(3.5) 

enter image description here

+0

Volevo solo farti sapere che ho trovato una soluzione leggermente diversa che è un po 'più robusta per cambiare le dimensioni delle finestre. Sto principalmente lasciando questo commento per chiederti di farmi sapere se hai trovato soluzioni alternative ancora migliori negli ultimi 2 anni. –