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.