web-dev-qa-db-fra.com

Comment empêcher les nombres de passer à une forme exponentielle dans Python figure matplotlib

J'utilise Matplotlib Python pour tracer des ensembles de données xy simples. Cela produit des graphiques de belle apparence, bien que, lorsque je "zoome" trop près de différentes sections du graphique tracé à l'aide de la vue (1) apparaissant lorsque vous exécutez plt.show()), les valeurs de l’axe des abscisses passent de la forme numérique standard (1050, 1060, 1070, etc.) à la forme scientifique avec notation exponentielle (par exemple 1, 1.5, 2.0 avec le symbole x). étiquette d'axe donnée sous la forme +1.057e3).

Je préférerais que mes figures conservent la numérotation simple de l'axe plutôt que d'utiliser une forme exponentielle. Existe-t-il un moyen de forcer Matplotlib à le faire?

69
IanRoberts

Le formatage des étiquettes de ticks est contrôlé par un objet Formatter qui, si vous n’avez rien fait d’impressionnant, sera un objet ScalerFormatterpar défaut . Ce formateur utilisera un décalage constant si le changement fractionnaire des valeurs visibles est très petit. Pour éviter cela, éteignez-le simplement:

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()

Si vous voulez éviter la notation scientifique en général,

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

Peut contrôler cela globalement via le axes.formatter.useoffsetcparam.

92
tacaswell

Vous pouvez utiliser une commande plus simple pour le désactiver:

plt.ticklabel_format(useOffset=False)
22
Eki

Vous pouvez utiliser quelque chose comme:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
13
Animesh Saxena