xticks suma sirve que pyplot pequeños para numeros notacion negativos negativa fisica exponentes example ejercicios convertir concepto con cientifica python-2.7 matplotlib label axes

python 2.7 - suma - Establezca notación científica con exponente fijo y dígitos significativos para múltiples subtramas



para que sirve la notacion cientifica (1)

Puede subclasificar matplotlib.ticker.ScalarFormatter y fijar el atributo orderOfMagnitude al número que desee (en este caso -4 ).
De la misma manera, puede arreglar el formato que se utilizará.

import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker class OOMFormatter(matplotlib.ticker.ScalarFormatter): def __init__(self, order=0, fformat="%1.1f", offset=True, mathText=True): self.oom = order self.fformat = fformat matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,useMathText=mathText) def _set_orderOfMagnitude(self, nothing): self.orderOfMagnitude = self.oom def _set_format(self, vmin, vmax): self.format = self.fformat if self._useMathText: self.format = ''$%s$'' % matplotlib.ticker._mathdefault(self.format) x = np.linspace(1,9,9) y1 = x*10**(-4) y2 = x*10**(-3) fig, ax = plt.subplots(2,1,sharex=True) ax[0].plot(x,y1) ax[1].plot(x,y2) for axe in ax: axe.yaxis.set_major_formatter(OOMFormatter(-4, "%1.1f")) axe.ticklabel_format(axis=''y'', style=''sci'', scilimits=(-4,-4)) plt.show()

Si bien esto puede parecer complicado a primera vista, lo único que realmente hace es sobrescribir los métodos privados _set_orderOfMagnitude y _set_format y evitar así que hagan algunas cosas sofisticadas en el fondo que no queremos. Porque al final, todo lo que necesitamos es que, independientemente de lo que ocurra internamente, self.orderOfMagnitude sea ​​siempre -4 y self.format sea ​​siempre "%1.1f" .

Estoy tratando de arreglar los ejes a la notación científica de dos conjuntos diferentes de datos donde uno es [1-9] x1e-3 y el otro es [1-9] x1e-4. Me gustaría establecer que ambos ejes sean 10 ^ -4 y que tengan un dígito después del decimal (por ejemplo,% .1e). Aquí hay una versión simple con la que he intentado jugar: me gustaría que los números en los ejes sean al menos 1 y quiero que ambas potencias sean iguales.

import numpy as np import matplotlib.pyplot as plt x = np.linspace(1,9,9) y1 = x*10**(-4) y2 = x*10**(-3) fig, ax = plt.subplots(2,1,sharex=True) ax[0].plot(x,y1) ax[0].ticklabel_format(axis=''y'', style=''sci'', scilimits=(-4,-4)) ax[0].yaxis.major.formatter._useMathText = True ax[1].plot(x,y2) ax[1].ticklabel_format(axis=''y'', style=''sci'', scilimits=(-4,-4)) ax[1].yaxis.major.formatter._useMathText = True plt.show()