2013-07-18 7 views
8

Questo sembra che dovrebbe essere facile - ma non riesco a vedere come farlo:matplotlib: disegnare le principali etichette delle tacche sotto etichette minori

Ho un complotto con il tempo sul X-asse. Voglio impostare due serie di zecche, zecche minori che mostrano l'ora del giorno e le zecche principali che mostrano il giorno/mese. Così faccio questo:

# set date ticks to something sensible: 
xax = ax.get_xaxis() 
xax.set_major_locator(dates.DayLocator()) 
xax.set_major_formatter(dates.DateFormatter('%d/%b')) 

xax.set_minor_locator(dates.HourLocator(byhour=range(0,24,3))) 
xax.set_minor_formatter(dates.DateFormatter('%H')) 

Questa etichetta le zecche ok, ma le maggiori etichette delle tacche (giorno/mese) sono disegnate sulla parte superiore delle etichette delle tacche minori:

Sig. wave height ensemble time series

Come faccio forza le principali etichette di graduazione per ottenere il grafico sotto quelle minori? Ho provato a inserire caratteri di escape newline (\ n) nel DateFormatter, ma si tratta di una soluzione scadente in quanto la spaziatura verticale non è corretta.

Qualsiasi consiglio sarebbe apprezzato!

risposta

15

È possibile utilizzare il metodo axisset_tick_params() con la parola chiave pad. Confronta il seguente esempio.

import datetime 
import random 
import matplotlib.pyplot as plt 
import matplotlib.dates as dates 

# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(100)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.plot(x,y) 
# beautify the x-labels 
plt.gcf().autofmt_xdate() 

ax = plt.gca() 
# set date ticks to something sensible: 
xax = ax.get_xaxis() 
xax.set_major_locator(dates.DayLocator()) 
xax.set_major_formatter(dates.DateFormatter('%d/%b')) 

xax.set_minor_locator(dates.HourLocator(byhour=range(0,24,3))) 
xax.set_minor_formatter(dates.DateFormatter('%H')) 
xax.set_tick_params(which='major', pad=15) 

plt.show() 

PS: Questo esempio è preso da moooeeeep


Ecco come il frammento di sopra renderebbe:

+0

perfetta, grazie! – ccbunney