2014-09-09 52 views
12

Sto tracciando dei grandi numeri con matplotlib in un programma pyqt usando python 2.7. Ho un asse y che va da 1e + 18 a 3e + 18 (di solito). Mi piacerebbe vedere ogni segno di spunta mostrare i valori in notazione scientifica e con 2 posizioni decimali. Per esempio 2.35e + 18 invece di solo 2e + 18 perché i valori tra 2e + 18 e 3e + 18 continuano a leggere solo 2e + 18 per alcuni segni di spunta. Ecco un esempio di questo problema.Posso mostrare i decimali e la notazione scientifica sull'asse di un grafico matplotlib usando Python 2.7?

import numpy as np 
import matplotlib.pyplot as plt 
fig = plt.figure() 
ax = fig.add_subplot(111) 
x = np.linspace(0, 300, 20) 
y = np.linspace(0,300, 20) 
y = y*1e16 
ax.plot(x,y) 
ax.get_xaxis().set_major_formatter(plt.LogFormatter(10, labelOnlyBase=False)) 
ax.get_yaxis().set_major_formatter(plt.LogFormatter(10, labelOnlyBase=False)) 
plt.show() 
+1

analogo: http://stackoverflow.com/questions/11577665/change-x-axes-scale-in-matplotlib –

risposta

33

Questo è veramente facile da fare se si utilizza il matplotlib.ticker.FormatStrFormatter in contrasto con il LogFormatter. Il seguente codice etichettare tutto con il formato '%.2e':

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

fig = plt.figure() 

ax = fig.add_subplot(111) 

x = np.linspace(0, 300, 20) 

y = np.linspace(0,300, 20) 
y = y*1e16 

ax.plot(x,y) 

ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e')) 

plt.show() 

Example plot

+0

Perfetto! Grazie! – tempneff