Unidades Personalizadas Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Matplotlib é uma biblioteca de plotagem para a linguagem de programação Python. Ela fornece uma API orientada a objetos para incorporar gráficos em aplicações usando toolkits GUI de uso geral como Tkinter, wxPython, Qt, ou GTK. Matplotlib permite que desenvolvedores criem uma ampla gama de visualizações estáticas, animadas e interativas em Python.

Neste laboratório, aprenderemos como criar unidades personalizadas em Matplotlib e plotar dados usando essas unidades personalizadas.

Dicas para a VM

Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.

Importar Bibliotecas

No primeiro passo, precisamos importar as bibliotecas necessárias - matplotlib.pyplot, numpy, matplotlib.ticker e matplotlib.units.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.ticker as ticker
import matplotlib.units as units

Criar uma Classe de Unidade Personalizada

Nesta etapa, criaremos uma classe de unidade personalizada - Foo. Esta classe suportará conversão e diferentes formatações de ticks dependendo da "unidade". Aqui, a "unidade" é apenas um fator de conversão escalar.

class Foo:
    def __init__(self, val, unit=1.0):
        self.unit = unit
        self._val = val * unit

    def value(self, unit):
        if unit is None:
            unit = self.unit
        return self._val / unit

Criar uma Classe Conversora

Nesta etapa, criaremos uma classe conversora - FooConverter. Esta classe definirá três métodos estáticos - axisinfo, convert e default_units.

class FooConverter(units.ConversionInterface):
    @staticmethod
    def axisinfo(unit, axis):
        """Return the Foo AxisInfo."""
        if unit == 1.0 or unit == 2.0:
            return units.AxisInfo(
                majloc=ticker.IndexLocator(8, 0),
                majfmt=ticker.FormatStrFormatter("VAL: %s"),
                label='foo',
                )

        else:
            return None

    @staticmethod
    def convert(obj, unit, axis):
        """
        Convert *obj* using *unit*.

        If *obj* is a sequence, return the converted sequence.
        """
        if np.iterable(obj):
            return [o.value(unit) for o in obj]
        else:
            return obj.value(unit)

    @staticmethod
    def default_units(x, axis):
        """Return the default unit for *x* or None."""
        if np.iterable(x):
            for thisx in x:
                return thisx.unit
        else:
            return x.unit

Registrar a Classe de Unidade Personalizada

Nesta etapa, registraremos a classe de unidade personalizada - Foo - com a classe conversora - FooConverter.

units.registry[Foo] = FooConverter()

Criar Pontos de Dados

Nesta etapa, criaremos alguns pontos de dados usando a classe de unidade personalizada - Foo.

## create some Foos
x = [Foo(val, 1.0) for val in range(0, 50, 2)]
## and some arbitrary y data
y = [i for i in range(len(x))]

Criar Gráficos

Nesta etapa, criaremos dois gráficos - um usando unidades personalizadas e o outro usando unidades padrão.

fig, (ax1, ax2) = plt.subplots(1, 2)
fig.suptitle("Custom units")
fig.subplots_adjust(bottom=0.2)

## plot specifying units
ax2.plot(x, y, 'o', xunits=2.0)
ax2.set_title("xunits = 2.0")
plt.setp(ax2.get_xticklabels(), rotation=30, ha='right')

## plot without specifying units; will use the None branch for axisinfo
ax1.plot(x, y)  ## uses default units
ax1.set_title('default units')
plt.setp(ax1.get_xticklabels(), rotation=30, ha='right')

plt.show()

Executar o Código

Na etapa final, execute o código para criar os gráficos de unidade personalizada.

Resumo

Neste laboratório, aprendemos como criar unidades personalizadas no Matplotlib usando uma classe de unidade personalizada e uma classe conversora. Em seguida, criamos dois gráficos - um usando unidades personalizadas e o outro usando unidades padrão - para demonstrar o uso dessas unidades personalizadas. Unidades personalizadas podem ser úteis ao lidar com dados complexos que exigem dimensionamento personalizado ou formatação de rótulos (tick formatting).