2013-02-05 18 views
58

Sto usando Matplotlib in Python per tracciare set di dati x-y semplici. Questo produce grafici piacevoli, sebbene quando "zoom in" troppo vicino su varie sezioni del grafico tracciato usando la Vista Figura (che appare quando si esegue plt.show()), i valori dell'asse x cambiano dal modulo numerico standard (1050, 1060 , 1070 ecc.) Alla forma scientifica con notazione esponenziale (es. 1, 1.5, 2.0 con l'etichetta dell'asse x data come +1.057e3).Come impedire che i numeri vengano modificati in forma esponenziale in Python matplotlib figura

Preferirei che le mie cifre mantengano la numerazione semplice dell'asse, piuttosto che utilizzare la forma esponenziale. C'è un modo in cui posso costringere Matplotlib a fare questo?

+1

duplicato di http://stackoverflow.com/questions/11855363/how- to-remove-relative-shift-in-matplotlib-axis/11858063 # 11858063 – tacaswell

risposta

81

La formattazione delle etichette di graduazione è controllata da un oggetto Formatter, che presupponendo che non si sia fatto nulla di fantasia sarà un ScalerFormatterby default. Questo formattatore utilizzerà uno spostamento costante se il cambiamento frazionario dei valori visibili è molto piccolo. Per evitare questo, è sufficiente spegnerlo:

plt.plot(arange(0,100,10) + 1000, arange(0,100,10)) 
ax = plt.gca() 
ax.get_xaxis().get_major_formatter().set_useOffset(False) 
plt.draw() 

Se si vuole evitare la notazione scientifica in generale,

ax.get_xaxis().get_major_formatter().set_scientific(False) 

possibile controllare questa con il mondo tramite il axes.formatter.useoffset rcparam.

+1

Grazie, funziona. Mi scuso anche per la domanda duplicata: ho cercato prima di postarla, ma le mie ricerche includevano termini come "notazione scientifica" e "forma esponenziale" piuttosto che "spostamenti degli assi relativi", che è ciò che l'utente precedente usava. – IanRoberts

+0

@IanRoberts no worries – tacaswell

+1

C'è un modo per forzare in modo permanente questa modifica? Non ho mai trovato gli assi delle notazioni scientifiche e finisco sempre per spegnerli. Però non sono riuscito a vedere un rcParam per questo. – IanRoberts

13

Si può usare qualcosa di simile a:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter 

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f')) 
9

È possibile utilizzare un comando semplice per spegnerlo:

plt.ticklabel_format(useOffset=False) 
+0

Grazie, soluzione più semplice. – arie64

+0

Hai fatto le cose semplicemente! Grazie. – Whir

Problemi correlati