2013-08-23 10 views
9

Fino a poco tempo fa usavo Mathematica per i miei grafici. Anche se è stato un vero dolore e tutto doveva essere fatto manualmente, i risultati erano molto vicini a quello che volevo. Un esempio è il seguente:Matplotlib colorbar background e label placement

Mathematica example plot

mi piace molto il rettangolo arrotondato grigio in background del colorbar. Mentre tutto doveva essere regolato manualmente in Mathematica, matplotlib è molto più automatico e ha già prodotto risultati interessanti.

Mathematica example plot

Ma ci sono ancora due problemi che ho:

  1. non so come fare un rettangolo arrotondato in background. Ho guardato la patch fancybbox ma non l'ho fatto funzionare con la barra dei colori come voglio. Qual è il modo migliore per ottenere qualcosa come la scatola Mathematica? Per la legenda nei grafici sembra esserci un'opzione bbox di fantasia ... ma non per le barre dei colori
  2. Quando uso il "segno minore" (<) l'etichetta della barra dei colori si sposta troppo verso destra. Come posso aggiustarlo (forse anche "in mezzo" ai numeri come nella trama di Mathematica)?

Non vedo l'ora di ricevere suggerimenti che puntano nella giusta direzione :).

+0

http://stackoverflow.com/questions/15882249/matplotlib-aligning-y-ticks-to-the-left/15883858#15883858 <- come regolare la imbottitura sulle etichette tick – tacaswell

+1

E per favore mostraci il codice. – tacaswell

risposta

17

alla tua seconda domanda: è possibile utilizzare un valore negativo labelpad per spostare l'etichetta indietro verso le ticklabels, in questo modo:

import numpy as np 
import matplotlib.pyplot as plt 

data = np.linspace(0, 10, num=256).reshape(16,16) 

cf = plt.contourf(data, levels=(0, 2.5, 5, 7.5, 10)) 
cb = plt.colorbar(cf) 

cb.set_ticklabels([r'$<10^{0}$', 1, 2, r'$10^{14}$', r'$10^{14}+12345678$']) 
cb.set_label(r'$n_e$ in $m^{-3}$', labelpad=-40, y=0.45) 

plt.show() 

Utilizzando il parametro y, è possibile inoltre spostare l'etichetta verso l'alto o verso il basso per migliore simmetria.

L'argomento di labelpad è indicato in punti (1/72 di pollice). y accetta valori in [0, 1], 0.0 è il bordo inferiore e 1.0 nella parte superiore.

Il risultato:

Script Output

+1

'y' non è limitato all'intervallo' [0.0, 1.0] '. Può prendere qualsiasi float/intero. Se 'y> 1.0' l'etichetta sarà posizionata sopra la parte superiore dell'asse, e se y y <0.0' sarà posizionata _below_ nella parte inferiore dell'asse. Le coordinate dell'asse sono _normalizzate_, che significa che "0.0" è "inizio" e "1.0" la "fine" dell'estensione dell'asse. – hooy

+0

Giusto per essere chiari: il '[0, 1]' è _interval notation_, not list notation. Quindi questo significa da '0' a' 1', incluso. Questo vale sia per la risposta che per il commento sopra. – hooy