2013-02-18 12 views
23

Sto cercando di modificare la formattazione delle date sull'asse x. L'immagine sotto mostra come appaiono sul mio grafico a barre per impostazione predefinita. Vorrei rimuovere la ripetizione di "Dec" e "2012" e avere solo i numeri di data effettivi lungo l'asse x.Modifica della formattazione della data delle etichette di graduazione dell'asse x in matplotlib

Qualche suggerimento su come posso farlo?

enter image description here

+0

La risposta qui ha funzionato per me: http://stackoverflow.com/questions/30133280/pandas-bar-plot-changes-date -format – Mahdi

risposta

38

In breve:

import matplotlib.dates as mdates 
myFmt = mdates.DateFormatter('%d') 
ax.xaxis.set_major_formatter(myFmt) 

Molti esempi sul sito web matplotlib. Quello che uso più comunemente è here

+2

Esiste un metodo alternativo senza utilizzare 'ax.xaxis' ma usando' plt. '? – 3kstc

+0

@ 3kstc Forse, ma non riesco a immaginare una situazione in cui fare affidamento ambiguo sulla macchina a stati è preferibile al comando più esplicito. –

+0

Per una rapida visualizzazione di tutti i possibili formati datetime, utilizzare [strftime.org] (http://strftime.org). – ImportanceOfBeingErnest

3

Mentre la risposta data da Paul H mostra la parte essenziale, non è un esempio completo. D'altra parte il matplotlib example sembra piuttosto complicato e non mostra come usare giorni.

Così per tutti nella necessità: ecco un esempio di lavoro completo:

from datetime import datetime 
import matplotlib.pyplot as plt 
from matplotlib.dates import DateFormatter 

myDates = [datetime(2012,1,i+3) for i in range(10)] 
myValues = [5,6,4,3,7,8,1,2,5,4] 
fig, ax = plt.subplots() 
ax.plot(myDates,myValues) 

myFmt = DateFormatter("%d") 
ax.xaxis.set_major_formatter(myFmt) 

## Rotate date labels automatically 
fig.autofmt_xdate() 
plt.show() 
Problemi correlati