2013-07-18 13 views
8

to wydaje się, że powinna być łatwa - ale nie mogę zobaczyć, jak to zrobić:matplotlib: narysować wytwórnie kleszczy pod niewielkimi etykiet

mam działkę z czasem na osi X. Chcę ustawić dwa zestawy tyknięć, drobne tiki pokazujące godzinę dnia i główne tiki pokazujące dzień/miesiąc. Więc to zrobić:

# 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')) 

Ten Etykiety kleszczy ok, ale wytwórnie tick (dzień/miesiąc) są rysowane na wierzchu mniejszych etykiet kleszczy:

Sig. wave height ensemble time series

Jak to zrobić zmusić główne etykiety zaznaczenia do wykreślenia poniżej mniejszych? Próbowałem wstawiać znaki nowej linii (\ n) w DateFormatter, ale jest to kiepskie rozwiązanie, ponieważ odstępy w pionie nie są właściwe.

Każda rada byłaby doceniona!

Odpowiedz

15

Można użyć metody axis przy użyciu słowa kluczowego pad. Porównaj następujący przykład.

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: Ten przykład jest wypożyczony z moooeeeep


Oto jak wyżej fragment uczyniłoby:

+0

idealne-dziękuję! – ccbunney

Powiązane problemy