plotagem com texto personalizado para pontos do eixo x

106

Estou desenhando um gráfico usando matplotlib e python como o código de exemplo abaixo.

x = array([0,1,2,3])
y = array([20,21,22,23])
plot(x,y)
show()

Como é o código acima no eixo x, verei os valores desenhados, 0.0, 0.5, 1.0, 1.5ou seja, os mesmos valores dos meus valores x de referência.

Existe alguma maneira de mapear cada ponto de x para uma string diferente? Por exemplo, eu quero que o eixo x mostre os nomes dos meses (strings Jun, July,...) ou outras strings como nomes de pessoas ( "John", "Arnold", ...) ou hora do relógio ( "12:20", "12:21", "12:22", ..).

Você sabe o que eu posso fazer ou que função devo dar uma olhada?
Para o meu propósito, isso poderia ser matplotlib.tickerútil?

user311906
fonte

Respostas:

195

Você pode definir xticks (e yticks) manualmente usando pyplot.xticks :

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0,1,2,3])
y = np.array([20,21,22,23])
my_xticks = ['John','Arnold','Mavis','Matt']
plt.xticks(x, my_xticks)
plt.plot(x, y)
plt.show()

unutbu
fonte
44
rotationàs vezes também é útil:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe
4
E como dispersar os itens uniformemente ao longo do eixo x? Digamos que meu eixo x tenha 1 milhão de pontos internamente e eu queira exibir apenas John, Arnold, Mavis e Matt ao longo do eixo uniformemente distribuído.
Steve K
@SirBenBenji: Use a indexação (por exemplo x[idx]) para selecionar apenas os dados que deseja exibir.
unutbu
Eu não entendo por que você escreve pylab, essa resposta está desatualizada e errada na minha opinião.
Mario Krenn
1

Isso funcionou para mim. Cada mês no eixo X

str_month_list = ['January','February','March','April','May','June','July','August','September','October','November','December']
ax.set_xticks(range(0,12))
ax.set_xticklabels(str_month_list)
Tajni
fonte