Saltar al contenido

Python matplotlib colorbar base de notación científica

Al fin después de tanto luchar ya hallamos la solución de este enigma que tantos usuarios de este sitio presentan. Si tienes algún detalle que aportar no dejes de compartir tu información.

Una posible solución puede ser subclasificar el ScalarFormatter y corrija el orden de magnitud como en esta pregunta: establezca notación científica con exponente fijo y dígitos significativos para múltiples subparcelas

Luego llamaría a este formateador con el orden de magnitud como argumento order, OOMFormatter(-2, mathText=False). mathText se establece en false para obtener la notación de la pregunta, es decir
ingrese la descripción de la imagen aquí


mientras lo establece en True, daría ingrese la descripción de la imagen aquí.

A continuación, puede configurar el formateador en la barra de colores a través de la barra de colores. format argumento.

import numpy as np; np.random.seed(0)
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_order_of_magnitude(self):
        self.orderOfMagnitude = self.oom
    def _set_format(self, vmin=None, vmax=None):
        self.format = self.fformat
        if self._useMathText:
             self.format = r'$mathdefault%s$' % self.format


z = (np.random.random((10,10)) - 0.5) * 0.2

fig, ax = plt.subplots()
plot = ax.contourf(z)
cbar = fig.colorbar(plot, format=OOMFormatter(-2, mathText=False))

plt.show()

ingrese la descripción de la imagen aquí

Para las versiones de matplotlib <3.1, la clase debe verse así:

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)

Al final de todo puedes encontrar los informes de otros creadores, tú igualmente tienes el poder mostrar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *