Cómo evitar que los números se cambien a forma exponencial en Python matplotlib figura


Estoy usando Matplotlib en Python para trazar conjuntos de datos x-y simples. Esto produce gráficos de aspecto agradable, aunque cuando "acerco" demasiado en varias secciones del gráfico trazado usando la Vista de figura (que aparece cuando ejecuta plt.show()), los valores del eje x cambian de la forma numérica estándar (1050, 1060, 1070, etc.) a la forma científica con notación exponencial (por ejemplo, 1, 1.5, 2.0 con la etiqueta del eje x dada como +1.057e3).

Preferiría que mis figuras conservaran la numeración simple del eje, en lugar de usar la forma exponencial. ¿Hay alguna manera de forzar a Matplotlib a hacer esto?

Author: Eric Leschinski, 2013-02-05

3 answers

El formato de las etiquetas tick está controlado por un objeto Formatter, que suponiendo que no haya hecho nada sofisticado será un ScalerFormatterpor defecto . Este formateador utilizará un cambio constante si el cambio fraccionario de los valores visibles es muy pequeño. Para evitar esto, simplemente apágalo:

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 desea evitar la notación científica en general,

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

Puede controlar esto globalmente a través del axes.formatter.useoffset rcparam.

 84
Author: tacaswell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-15 16:18:41

Puede usar un comando más simple para desactivarlo:

plt.ticklabel_format(useOffset=False)
 15
Author: Eki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-05 12:15:07

Puedes usar algo como:

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter

ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
 13
Author: Animesh Saxena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-23 14:54:00