python - matrices - Cambie la escala x ejes en matplotlib
python graficos 2d (4)
Creé esta trama usando Matlab
Usando matplotlib, x-axies dibuja números grandes como 100000, 200000, 300000. Me gustaría tener algo como 1, 2, 3 y un 10 ^ 5 para indicar que en realidad es 100000, 200000, 300000.
¿Hay una manera simple de crear dicha escala en matplotlib?
El formateador escalar admite la recopilación de los exponentes. Los documentos son los siguientes:
clase matplotlib.ticker.ScalarFormatter (useOffset = True, useMathText = False, useLocale = None) Bases: matplotlib.ticker.Formatter
La ubicación de marca es un número antiguo simple. Si useOffset == True y el rango de datos es mucho más pequeño que el promedio de datos, entonces se determinará un desplazamiento de manera que las etiquetas de tic sean significativas. La notación científica se usa para 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 estos están controlados por el parámetro axes.formatter.limits rc.
tu 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 mostrado en el formato x10^5
, crea una instancia de ScalarFormatter con useMathText=True
.
También puedes usar:
xfmt.set_useOffset(10000)
Para obtener un resultado como este:
Encuentro la solución simple
pylab.ticklabel_format(axis=''y'',style=''sci'',scilimits=(1,4))
Esto no es tanto una respuesta a su pregunta original como a una de las consultas que tuvo en el cuerpo de su pregunta.
Un pequeño preámbulo, para que mi nombre no parezca extraño:
import matplotlib
from matplotlib import rc
from matplotlib.figure import Figure
ax = self.figure.add_subplot( 111 )
Como se mencionó, puede usar ticklabel_format para especificar que matplotlib debe usar la notación científica para valores grandes o pequeños:
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 manera más elegante de cambiar entre notación científica ''1e'' y ''x10 ^'' que:
ax.xaxis.major.formatter._useMathText = True
Esto debería darte más Matlab-esc, y de hecho podría decirse que es mejor apariencia. Creo que lo siguiente debería hacer lo mismo:
rc(''text'', usetex=True)
Intenta usar matplotlib.pyplot.ticklabel_format
:
import matplotlib.pyplot as plt
...
plt.ticklabel_format(style=''sci'', axis=''x'', scilimits=(0,0))
Esto aplica la notación científica (es decir, ax 10^b
) a sus marcas de eje x