HOWTO · Matplotlib
Definir valores do eixo X em Matplotlib
Este tutorial mostra como podemos definir os valores dos eixos X usando os matplotlib.pyplot.xticks() em Matplotlib.
Nesta página
Use matplotlib.pyplot.xticks() para escolher onde as marcas de escala do eixo X aparecem e, opcionalmente, qual texto é exibido nessas posições. As posições das marcas indicam as coordenadas horizontais; elas não alteram os dados plotados nem definem o título do eixo. Para que o gráfico seja legível, associe cada rótulo à posição e ao ponto de dados que ele descreve.
Definir posições e rótulos das marcas do eixo X
O primeiro argumento de xticks() é uma sequência de posições. O segundo argumento, opcional, fornece um rótulo para cada posição. Mantenha as duas sequências com o mesmo tamanho e na mesma ordem. O exemplo a seguir mostra, em uma única figura, rótulos personalizados, espaçamento numérico, uma alternativa com posições de índice igualmente espaçadas e um conjunto reduzido de rótulos de categorias girados.
import matplotlib.pyplot as plt
x = [1, 2, 5, 9]
y = [3, 5, 4, 8]
labels = ['Jan', 'Feb', 'May', 'Sep']
categories = ['North region', 'South region', 'East region', 'West region', 'Central region']
values = [12, 9, 14, 7, 11]
fig, axes = plt.subplots(2, 2, figsize=(10, 7))
axes[0, 0].plot(x, y, marker='o')
axes[0, 0].set_title('Custom labels')
axes[0, 0].set_xlabel('Month')
axes[0, 0].set_ylabel('Value')
plt.sca(axes[0, 0])
plt.xticks(x, labels)
axes[0, 1].plot(x, y, marker='o')
axes[0, 1].set_title('Numeric spacing')
axes[0, 1].set_xlabel('X value')
axes[0, 1].set_ylabel('Value')
index_positions = list(range(len(x)))
axes[1, 0].plot(index_positions, y, marker='o')
axes[1, 0].set_title('Evenly spaced positions')
axes[1, 0].set_xlabel('Month')
axes[1, 0].set_ylabel('Value')
axes[1, 0].set_xticks(index_positions)
axes[1, 0].set_xticklabels(labels)
axes[1, 1].bar(categories, values)
axes[1, 1].set_title('Fewer, rotated category labels')
axes[1, 1].set_ylabel('Value')
axes[1, 1].set_xticks([0, 2, 4])
axes[1, 1].set_xticklabels(categories[::2])
plt.sca(axes[1, 1])
plt.xticks(rotation=35, ha='right')
fig.tight_layout()
plt.show()
O gráfico no canto superior esquerdo associa quatro posições a quatro rótulos de meses. O gráfico numérico usa os valores reais de x; por isso, a distância entre 2 e 5 é maior que a distância entre 1 e 2. Já o gráfico no canto inferior esquerdo usa as posições de 0 a 3, dando aos meses espaçamento visual igual e mantendo cada valor associado ao mês correspondente. O último gráfico coloca cinco barras e mostra rótulos apenas nas posições 0, 2 e 4 para reduzir a sobreposição; em seguida, gira esses rótulos e os alinha à direita. Os rótulos visíveis no exemplo permanecem em inglês. Execute o script em um ambiente Python com Matplotlib instalado; não há saída capturada incluída aqui.
Lidar com valores de X espaçados de forma irregular
Um eixo numérico representa distâncias numéricas. Se suas medições ocorrerem nos valores de x 1, 2, 5 e 9, plotá-las nesses valores preserva corretamente os intervalos maiores entre 2 e 5 e entre 5 e 9. Definir os rótulos das marcas como nomes de meses não altera essas coordenadas. Mantenha esse espaçamento quando a distância ou o tempo decorrido for relevante.
Se o objetivo for comparar categorias em intervalos iguais, plote os valores de y usando posições de índice, como range(len(x)), e depois use os nomes das categorias como rótulos das marcas. A sequência de dados e os rótulos devem seguir a mesma ordem. Isso muda a escala horizontal de distância numérica para ordem das categorias; portanto, não é adequado quando os intervalos entre as medições numéricas têm significado.
Para rótulos que representam datas, use valores de data como dados de x plotados e formate as marcas de data conforme necessário; atribuir nomes de meses a coordenadas numéricas sem relação com datas não as transforma em datas.
Controlar a frequência das marcas e melhorar a legibilidade dos rótulos
Em um gráfico pequeno, passe posições explícitas para xticks() para mostrar apenas algumas marcas. Por exemplo, plt.xticks(x[::2]) seleciona um valor a cada dois em uma sequência ordenada. Em uma escala numérica regular, um localizador pode escolher um intervalo adequado conforme a visualização muda. Por exemplo, importe MultipleLocator de matplotlib.ticker e chame ax.xaxis.set_major_locator(MultipleLocator(2)) para solicitar marcas principais em intervalos de duas unidades. Use posições explícitas quando os rótulos forem categorias com significado e um localizador quando o eixo for numérico.
Rótulos longos podem ser girados com plt.xticks(rotation=35, ha='right'); ha define o alinhamento horizontal. Se os rótulos ainda se sobrepuserem depois de girados, aumente a largura da figura ou reduza o número de marcas. tight_layout() pode reservar espaço ao redor dos eixos, mas não escolhe quais marcas são adequadas.
O exemplo acima usa set_xticks nos eixos individuais para a maioria dos painéis e xticks no eixo atual para personalizar os rótulos. No estilo orientado a objetos, ax.set_xticks(positions, labels) vincula a operação a um eixo específico. Com pyplot, selecione primeiro o eixo desejado quando a figura tiver vários gráficos.
Perguntas frequentes: definir valores no eixo X
Posso definir posições e rótulos em uma única chamada? Sim. Forneça as duas sequências a plt.xticks(positions, labels) ou use ax.set_xticks(positions, labels). Cada rótulo é associado por índice à posição correspondente.
Como faço para mostrar menos marcas? Forneça uma lista menor de posições ou use um localizador para marcas numéricas espaçadas regularmente. A frequência das marcas é independente do número de pontos de dados plotados.
Posso usar categorias de texto no eixo X? Sim. Plote diretamente os valores das categorias, como no gráfico de barras, ou plote posições de índice numéricas e atribua os nomes das categorias como rótulos. Use a segunda opção quando precisar de uma ordem específica para as categorias ou de espaçamento igual.
O que posso fazer quando os rótulos se sobrepõem? Mostre menos rótulos, gire-os, alinhe à direita os textos girados ou aumente a largura da figura. Essas alterações afetam os rótulos das marcas, mas não alteram os valores plotados.