Corrigindo Excesso de Ticks no Matplotlib

Beginner

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

Introdução

Ao trabalhar com Matplotlib, é comum encontrar comportamentos inesperados nos ticks (marcas), como muitos ticks ou ticks fora de ordem. Isso geralmente é causado pela passagem de uma lista de strings em vez de números ou objetos datetime, que o Matplotlib trata como variáveis categóricas por padrão. Este laboratório fornecerá instruções passo a passo sobre como corrigir o excesso de ticks no Matplotlib.

Dicas para a VM (Máquina Virtual)

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 às limitações do 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ê.

Verifique o Tipo de Dados

O primeiro passo é verificar o tipo de dados dos valores do eixo x. Se for uma lista de strings, é provável que o comportamento dos ticks seja inesperado. Para corrigir isso, precisamos converter as strings em tipos numéricos. Aqui está um exemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]

## plot the data with string tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.set_xlabel('Categories')
plt.show()

Neste exemplo, temos uma lista de strings no eixo x. Quando plotamos os dados, os rótulos dos ticks estão fora de ordem e mal posicionados.

Converter Strings para Tipos Numéricos

Para corrigir o comportamento dos ticks, precisamos converter as strings em tipos numéricos. Aqui está um exemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]

## convert strings to floats
x = np.asarray(x, dtype='float')

## plot the data with numeric tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.set_xlabel('Floats')
plt.show()

Neste exemplo, convertemos os valores string em floats usando np.asarray(). Quando plotamos os dados novamente, os rótulos dos ticks estão como esperado.

Lidar com Muitos Ticks

Se o eixo x tiver muitos elementos, todos os quais são strings, podemos acabar com muitos ticks ilegíveis. Neste caso, precisamos converter as strings em tipos numéricos. Aqui está um exemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data with 100 elements
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)

## plot the data with string tick labels
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Categories')
plt.show()

Neste exemplo, temos 100 valores string no eixo x, resultando em muitos ticks ilegíveis.

Para corrigir isso, precisamos converter as strings em floats. Aqui está um exemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data with 100 elements
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)

## convert strings to floats
x = np.asarray(x, float)

## plot the data with numeric tick labels
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('Floats')
plt.show()

Neste exemplo, convertemos os valores string em floats usando np.asarray(). Quando plotamos os dados novamente, os rótulos dos ticks estão como esperado.

Lidar com Ticks de Data e Hora

Ao trabalhar com valores de data e hora no eixo x, é importante converter as strings em objetos datetime para obter os localizadores e formatadores de data corretos. Aqui está um exemplo:

import matplotlib.pyplot as plt
import numpy as np

## create example data with datetime strings
x = ['2021-10-01', '2021-11-02', '2021-12-03', '2021-09-01']
y = [0, 2, 3, 1]

## convert strings to datetime64
x = np.asarray(x, dtype='datetime64[s]')

## plot the data with datetime tick labels
fig, ax = plt.subplots()
ax.plot(x, y, 'd')
ax.tick_params(axis='x', labelrotation=90)
plt.show()

Neste exemplo, convertemos os valores string em datetime64 usando np.asarray(). Quando plotamos os dados novamente, os rótulos dos ticks estão como esperado.

Resumo

Em resumo, ao trabalhar com Matplotlib, é importante verificar o tipo de dados dos valores do eixo x. Se forem strings, precisamos convertê-los em tipos numéricos para corrigir comportamentos inesperados dos ticks. Se houver muitos ticks, também precisamos converter as strings em tipos numéricos. Ao trabalhar com valores de data e hora, precisamos converter as strings em objetos datetime para obter os localizadores e formatadores de data corretos.