Corrigindo muitos ticks #

Uma causa comum para o comportamento inesperado do tick é passar uma lista de strings em vez de números ou objetos de data e hora. Isso pode acontecer facilmente sem aviso prévio ao ler um arquivo de texto delimitado por vírgulas. Matplotlib trata listas de strings como variáveis ​​categóricas ( Plotando variáveis ​​categóricas ) e, por padrão, coloca um tick por categoria e as plota na ordem em que são fornecidas. Se isso não for desejado, a solução é converter as strings em um tipo numérico como nos exemplos a seguir.

Exemplo 1: Strings podem levar a uma ordem inesperada de ticks numéricos #

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(1, 2, constrained_layout=True, figsize=(6, 2.5))
x = ['1', '5', '2', '3']
y = [1, 4, 2, 3]
ax[0].plot(x, y, 'd')
ax[0].tick_params(axis='x', color='r', labelcolor='r')
ax[0].set_xlabel('Categories')
ax[0].set_title('Ticks seem out of order / misplaced')

# convert to numbers:
x = np.asarray(x, dtype='float')
ax[1].plot(x, y, 'd')
ax[1].set_xlabel('Floats')
ax[1].set_title('Ticks as expected')
Os tiques parecem fora de ordem / mal colocados, os tiques são esperados
Text(0.5, 1.0, 'Ticks as expected')

Exemplo 2: Strings podem levar a muitos ticks #

Se x tiver 100 elementos, todos strings, então teríamos 100 ticks (ilegíveis), e novamente a solução é converter as strings em floats:

fig, ax = plt.subplots(1, 2, figsize=(6, 2.5))
x = [f'{xx}' for xx in np.arange(100)]
y = np.arange(100)
ax[0].plot(x, y)
ax[0].tick_params(axis='x', color='r', labelcolor='r')
ax[0].set_title('Too many ticks')
ax[0].set_xlabel('Categories')

ax[1].plot(np.asarray(x, float), y)
ax[1].set_title('x converted to numbers')
ax[1].set_xlabel('Floats')
Muitos ticks, x convertidos em números
Text(0.5, -3.555555555555568, 'Floats')

Exemplo 3: Strings podem levar a uma ordem inesperada de ticks de data e hora #

Um caso comum é quando as datas são lidas de um arquivo CSV, elas precisam ser convertidas de strings em objetos datetime para obter os localizadores e formatadores de data adequados.

fig, ax = plt.subplots(1, 2, constrained_layout=True, figsize=(6, 2.75))
x = ['2021-10-01', '2021-11-02', '2021-12-03', '2021-09-01']
y = [0, 2, 3, 1]
ax[0].plot(x, y, 'd')
ax[0].tick_params(axis='x', labelrotation=90, color='r', labelcolor='r')
ax[0].set_title('Dates out of order')

# convert to datetime64
x = np.asarray(x, dtype='datetime64[s]')
ax[1].plot(x, y, 'd')
ax[1].tick_params(axis='x', labelrotation=90)
ax[1].set_title('x converted to datetimes')

plt.show()
Datas fora de ordem, x convertido em data e hora

Tempo total de execução do script: ( 0 minutos 1,403 segundos)

Galeria gerada por Sphinx-Gallery