2013-07-18 60 views
8

這似乎是它應該是很容易的主要刻度標籤 - 但我看不出如何做到這一點:matplotlib:畫下輕微標籤

我有時間在X軸上的曲線圖。我想要設置兩組刻度,小刻度表示一天中的小時,主刻度表示日/月。所以我這樣做:

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

這個標籤蜱確定,但主刻度標記的標籤(日/月)上繪製次刻度標記的頂部:

Sig. wave height ensemble time series

我如何強制主要的刻度標籤被繪製在次要標籤下方?我試着在DateFormatter中放置換行符(\ n),但這是一個糟糕的解決方案,因爲垂直間距不太正確。

任何意見將不勝感激!

回答

15

您可以使用axis方法set_tick_params()以及關鍵字pad。比較下面的例子。

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:這個例子是從moooeeeep


借用這裏是上面的代碼將如何呈現:

+0

perfect-謝謝! – ccbunney