Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/03/2013, 18:43
Bael_Balzac
 
Fecha de Ingreso: julio-2011
Mensajes: 62
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Mostrar números eje x

El siguiente código traza un papel de probabilidad, pero en el eje x solo se ve el 0 y el 1; cuando le agrego el signo % a cada uno de los números del eje x muestra un error, por favor como puede solucionarse.
Código:
from __future__ import unicode_literals

import numpy as np
from numpy import ma
from matplotlib import scale as mscale
from matplotlib import transforms as mtransforms
from matplotlib.ticker import Formatter, FixedLocator

class EscalaAcumuladaGumbel(mscale.ScaleBase):

    name = 'gumbel'

    def __init__(self, axis, **kwargs):
        mscale.ScaleBase.__init__(self)
        thresh = kwargs.pop("thresh", 5000)
        if thresh >= 5800.0:
            raise ValueError("thresh must be less than 4800")
        self.thresh = thresh

    def get_transform(self):
        return self.TransformacionAcumuladaGumbel(self.thresh)

    def set_default_locators_and_formatters(self, axis):
        class DegreeFormatter(Formatter):
            def __call__(self, x, pos=None):
                # \u0025 : simbolo %
                return "%d\u00b0" % (x*1.0)
        axis.set_major_locator(FixedLocator(np.arange(-3.0, 3.0, 0.25)))
        axis.set_major_formatter(DegreeFormatter())
        axis.set_minor_formatter(DegreeFormatter())

    def limit_range_for_scale(self, vmin, vmax, minpos):
        return max(vmin, -self.thresh), min(vmax, self.thresh)

    class TransformacionAcumuladaGumbel(mtransforms.Transform):
        input_dims = 1
        output_dims = 1
        is_separable = True

        def __init__(self, thresh):
            mtransforms.Transform.__init__(self)
            self.thresh = thresh

        def transform(self, a):
            masked = ma.masked_where((a < -self.thresh) | (a > self.thresh), a)
            if masked.mask.any():
                return ma.exp(-np.exp(-a))
            else:
                return np.exp(-np.exp(-a))

        def inverted(self):
            return EscalaAcumuladaGumbel.TransformacionInversaAcumuladaGumbel(self.thresh)

    class TransformacionInversaAcumuladaGumbel(mtransforms.Transform):
        input_dims = 1
        output_dims = 1
        is_separable = True

        def __init__(self, thresh):
            mtransforms.Transform.__init__(self)
            self.thresh = thresh

        def transform(self, a):
            return -np.log(-np.log(a))

        def inverted(self):
            return EscalaAcumuladaGumbel.TransformacionAcumuladaGumbel(self.thresh)

mscale.register_scale(EscalaAcumuladaGumbel)


if __name__ == '__main__':
    import matplotlib.pyplot as plt

    Datos = np.array([ 2690.0, 2700.0, 2700.667, 2701.333, 2702.0, 3196.0, 2372.0, 2395.0, 2128.0, 2727.0, 2431.0, 2850.0, 2216.0, 2057.0, 2269.0, 2208.0, 2628.0, 2729.0, 2588.0, 3448.0, 2508.0, 3081.0, 2417.0, 2770.0, 2283.0, 2455.0, 1963.0, 2786.0, 2885.0, 2357.0, 3422.0, 2423.0, 2148.0, 1305.0, 2472.0, 2186.0, 2720.0, 2430.0, 2304.0, 2556.0, 2625.0, 2164.0, 2585.0, ])
    DatosOrdenados = np.sort(Datos)
    mu = 2353.157
    sigma = 297.961

    x1 = ( DatosOrdenados - mu) / sigma
    y1 = (np.exp(-np.exp(-x1)))

    plt.plot(x1, y1, 'ro', lw=2)
    plt.gca().set_xscale('gumbel')

    plt.xlabel('F(z)')
    plt.ylabel('z')
    plt.title('Papel de probabilidad de Gumbel')
    plt.grid(True)

    plt.show()
Código basado en [URL="http://matplotlib.org/examples/api/custom_scale_example.html"]http://matplotlib.org/examples/api/custom_scale_example.html[/URL]