2014-09-22 56 views
17

Sto provando a mettere una colorbar sulla mia immagine usando matplotlib. Il problema arriva quando provo a forzare la scrittura delle ticklabels in notazione scientifica. Come posso forzare la notazione scientifica (cioè 1x10^0, 2x10^0, ..., 1x10^2 e così via) nei segni di spunta della barra dei colori?Notazione scientifica colorbar in matplotlib

esempio, creiamo e la trama e l'immagine con la sua barra di colore:

import matplotlib as plot 
import numpy as np 

img = np.random.randn(300,300) 
myplot = plt.imshow(img) 
plt.colorbar(myplot) 
plt.show() 

Quando faccio questo, ottengo la seguente immagine:

image created with the previous code

Tuttavia, vorrei vedere i ticklabels in notazione scientifica ... Esiste un comando di una riga per fare questo? Altrimenti, c'è qualche suggerimento là fuori? Grazie!

risposta

25

Si potrebbe utilizzare colorbar's format parameter:

import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.ticker as ticker 

img = np.random.randn(300,300) 
myplot = plt.imshow(img) 

def fmt(x, pos): 
    a, b = '{:.2e}'.format(x).split('e') 
    b = int(b) 
    return r'${} \times 10^{{{}}}$'.format(a, b) 

plt.colorbar(myplot, format=ticker.FuncFormatter(fmt)) 
plt.show() 

enter image description here

+0

Grazie, ma mi piacerebbe vedere 10^1 10^2, ecc. Anziché e + 01, e + 02. È possibile? – Alejandro

+1

Ho modificato un po 'il codice per mostrare la notazione scientifica usando il lattice. Grazie mille! La soluzione è molto utile e davvero molto interessante. – Alejandro

+0

Grazie per il miglioramento. – unutbu

19

È possibile specificare il formato del colorbar zecche come segue:

pl.colorbar(myplot, format='%.0e') 
+1

Grazie, ma mi piacerebbe vedere 10^1 10^2, ecc piuttosto che e + 01, e + 02. È possibile? – Alejandro