2012-07-20 20 views
49

creé esta parcela usando MatlabCambio x nueva escala en matplotlib

enter image description here

Usando matplotlib, el x-axies atrae a grandes números como 100000, 200000, 300000 Me gustaría tener algo así como 1 , 2, 3 y un 10^5 para indicar que en realidad es 100000, 200000, 300000.

¿Existe una manera simple de crear dicha escala en matplotlib?

Respuesta

80

Trate de usar matplotlib.pyplot.ticklabel_format:

import matplotlib.pyplot as plt 
... 
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0)) 

Esto se aplica la notación científica (es decir a x 10^b) a su eje X marcas de división

+1

trabajado, gracias. – Eagle

+6

¿es posible agregar un desplazamiento? (por ejemplo, en lugar de 0.0, 0.5, 1.0, 1.5, ... yx 10^b será 0, 5, 10, 15, ... yx 10^{b-1}) – Eagle

+9

'ticklabel_format' también un método para los objetos de ejes, puede probar algo como 'ax.ticklabel_format (style = 'sci', axis = 'x', scilimits = (0,0))' – Covich

11

El scalar formatter apoya la recogida de los exponentes. Los documentos son los siguientes:

matplotlib.ticker.ScalarFormatter clase (useOffset = Verdadero, useMathText = False, useLocale = Ninguno) Bases: matplotlib.ticker.Formatter

Tick ubicación es un número simple y llano . Si useOffset == True y el rango de datos es mucho más pequeño que el promedio de datos, entonces un desplazamiento será determinado de modo que las etiquetas de tic tienen sentido. La notación científica se usa para los datos < 10^-n o datos> = 10^m, donde n y m son los límites de potencia establecidos usando set_powerlimits ((n, m)). Los valores predeterminados para están controlados por el parámetro axes.formatter.limits rc.

su técnica sería:

xfmt = ScalarFormatter() 
xfmt.set_powerlimits((-3,3)) # Or whatever your limits are . . . 
{{ Make your plot }} 
gca().xaxis.set_major_formatter(xfmt) 

Para obtener el exponente que se muestra en el formato x10^5, una instancia del ScalarFormatter con useMathText=True.

After Image

También es posible usar:

xfmt.set_useOffset(10000) 

Para obtener un resultado como este:

enter image description here

+0

me gusta esta solución, pero prefiero 'x10^4' en lugar de '1e4' – Eagle

+0

Estoy de acuerdo. Y estoy seguro de que es posible, pero no sé cómo. –

+2

Crea una instancia de ScalarFormatter con 'useMathText = True' para obtener' x10^4'. –

8

puedo encontrar la solución simple

pylab.ticklabel_format(axis='y',style='sci',scilimits=(1,4)) 
9

Esto no es tanto una respuesta a su pregunta original como a una de las consultas que tenía en el cuerpo de su pregunta.

Un pequeño preámbulo, de modo que mi nombramiento no parece extraño:

import matplotlib 
from matplotlib import rc 
from matplotlib.figure import Figure 
ax = self.figure.add_subplot(111) 

Como se ha mencionado se puede utilizar para especificar que ticklabel_format matplotlib debe usar la notación científica para grandes o pequeños valores:

ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both') 

Puede afectar la forma en que esto se muestra utilizando los indicadores en rcParams (de matplotlib import rcParams) o configurándolos directamente. No he encontrado una forma más elegante de cambiar entre '1e' y 'x 10 ^' notación científica que:

ax.xaxis.major.formatter._useMathText = True 

Esto debería darle la más Matlab-ESC, y de hecho posiblemente mejor apariencia. Creo que lo siguiente debería hacer lo mismo:

rc('text', usetex=True) 
+0

sí, no es bonito, pero funciona, ¡gracias! –

+0

y todavía funciona :-) – uhoh

Cuestiones relacionadas