tracciare con testo personalizzato per i punti dell'asse x


106

Sto disegnando una trama usando matplotlib e python come il codice di esempio qui sotto.

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

Poiché è il codice sopra sull'asse x, vedrò i valori disegnati 0.0, 0.5, 1.0, 1.5cioè gli stessi valori dei miei valori x di riferimento.

Esiste comunque per mappare ogni punto di x su una stringa diversa? Quindi, ad esempio, voglio che l'asse x mostri i nomi dei mesi (stringhe Jun, July,...) o altre stringhe come i nomi delle persone ( "John", "Arnold", ...) o l'ora dell'orologio ( "12:20", "12:21", "12:22", ..).

Sai cosa posso fare o quale funzione dare un'occhiata?
Per il mio scopo potrebbe essere matplotlib.tickerd'aiuto?

Risposte:


195

Puoi impostare manualmente xticks (e yticks) 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()


44
rotationa volte è anche utile:plt.xticks(range(5), ["some", "words", "as", "x", "ticks"], rotation=45)
Adobe

4
E come disperdere gli elementi in modo uniforme lungo l'asse x? Diciamo che il mio asse x ha 1 milione di punti internamente e voglio visualizzare solo John, Arnold, Mavis e Matt lungo l'asse distribuito uniformemente?
Steve K il

@SirBenBenji: usa l'indicizzazione (ad esempio x[idx]) per selezionare solo i dati che desideri visualizzare.
unutbu

Non capisco perché scrivi pylab, quella risposta è obsoleta e sbagliata secondo me.
Mario Krenn

1

Questo ha funzionato per me. Ogni mese sull'asse 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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.