2015-03-21 11 views
18

Sto provando a impostare il formato su due numeri decimali in un ambiente di trama secondaria matplotlib. Sfortunatamente, non ho idea di come risolvere questo compito.Matstotlib: specifica il formato dei float per le etichette tick

Per evitare di utilizzare la notazione scientifica sull'asse y, ho utilizzato ScalarFormatter(useOffset=False) come si può vedere nel mio snippet di seguito. Penso che il mio compito dovrebbe essere risolto passando ulteriori opzioni/argomenti al formattatore usato. Tuttavia, non ho trovato alcun suggerimento nella documentazione di matplotlib.

Come è possibile impostare due cifre decimali o nessuna (sono necessari entrambi i casi)? Purtroppo non sono in grado di fornire dati di esempio.


- frammento -

f, axarr = plt.subplots(3, sharex=True) 

data = conv_air 
x = range(0, len(data)) 

axarr[0].scatter(x, data) 
axarr[0].set_ylabel('$T_\mathrm{air,2,2}$', size=FONT_SIZE) 
axarr[0].yaxis.set_major_locator(MaxNLocator(5)) 
axarr[0].yaxis.set_major_formatter(ScalarFormatter(useOffset=False)) 
axarr[0].tick_params(direction='out', labelsize=FONT_SIZE) 
axarr[0].grid(which='major', alpha=0.5) 
axarr[0].grid(which='minor', alpha=0.2) 

data = conv_dryer 
x = range(0, len(data)) 

axarr[1].scatter(x, data) 
axarr[1].set_ylabel('$T_\mathrm{dryer,2,2}$', size=FONT_SIZE) 
axarr[1].yaxis.set_major_locator(MaxNLocator(5)) 
axarr[1].yaxis.set_major_formatter(ScalarFormatter(useOffset=False)) 
axarr[1].tick_params(direction='out', labelsize=FONT_SIZE) 
axarr[1].grid(which='major', alpha=0.5) 
axarr[1].grid(which='minor', alpha=0.2) 

data = conv_lambda 
x = range(0, len(data)) 

axarr[2].scatter(x, data) 
axarr[2].set_xlabel('Iterationsschritte', size=FONT_SIZE) 
axarr[2].xaxis.set_major_locator(MaxNLocator(integer=True)) 
axarr[2].set_ylabel('$\lambda$', size=FONT_SIZE) 
axarr[2].yaxis.set_major_formatter(ScalarFormatter(useOffset=False)) 
axarr[2].yaxis.set_major_locator(MaxNLocator(5)) 
axarr[2].tick_params(direction='out', labelsize=FONT_SIZE) 
axarr[2].grid(which='major', alpha=0.5) 
axarr[2].grid(which='minor', alpha=0.2) 

risposta

47

consultare la documentazione rilevante in general e specifically

from matplotlib.ticker import FormatStrFormatter 

fig, ax = plt.subplots() 

ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f')) 

enter image description here

+0

Nota: se si preferisce utilizzare la nuova '.format () 'specifiers di stile è possibile utilizzare' StrMethodFormatter' menzionato nella [pag e] (http://matplotlib.org/api/ticker_api.html#matplotlib.ticker.StrMethodFormatter) – mangecoeur

+0

Sto complottando con 'imshow' e questo non funziona per me. Ho anche provato 'plt.gca(). Yaxis.set_major_formatter (FormatStrFormatter ('%. G'))' da [questa risposta] (https://stackoverflow.com/questions/42929550/ticks-format-of- an-axis-in-matplotlib) ma senza successo. Qualche idea? – airdas

+0

@airdas Se si verifica un problema, si prega di fare una nuova domanda al riguardo, fornendo tutti i dettagli e una [mve] del problema. – ImportanceOfBeingErnest

Problemi correlati