2
我正在使用Matplotlib從數據庫動態生成.png圖表。用戶可以將任何給定範圍的日期時間設置爲x軸,並且我需要考慮所有的日期時間。雖然Matplotlib具有dates.AutoDateLocator(),但我希望打印在圖表上的日期時間格式是特定於上下文的 - 例如,如果用戶從下午3點開始製圖。到下午5點,不需要顯示年/月/日信息。現在,我手動創建Locator和Formatter對象:Matplotlib autodatelocator自定義日期格式?
def get_ticks(start, end):
from datetime import timedelta as td
delta = end - start
if delta <= td(minutes=10):
loc = mdates.MinuteLocator()
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(minutes=30):
loc = mdates.MinuteLocator(byminute=range(0,60,5))
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(hours=1):
loc = mdates.MinuteLocator(byminute=range(0,60,15))
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(hours=6):
loc = mdates.HourLocator()
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(days=1):
loc = mdates.HourLocator(byhour=range(0,24,3))
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(days=3):
loc = mdates.HourLocator(byhour=range(0,24,6))
fmt = mdates.DateFormatter('%I:%M %p')
elif delta <= td(weeks=2):
loc = mdates.DayLocator()
fmt = mdates.DateFormatter('%b %d')
elif delta <= td(weeks=12):
loc = mdates.WeekdayLocator()
fmt = mdates.DateFormatter('%b %d')
elif delta <= td(weeks=52):
loc = mdates.MonthLocator()
fmt = mdates.DateFormatter('%b')
else:
loc = mdates.MonthLocator(interval=3)
fmt = mdates.DateFormatter('%b %Y')
return loc,fmt
有沒有更好的方法來做到這一點?
不幸的是,我的問題與AutoDateFormatter是它不會讓你自定義格式的各個層次。因此,無論您喜歡與否,其分鐘級格式化都將在「HH:MM:SS時區」中進行。 – jbreed 2010-06-11 23:29:19
我編輯了答案,提到開發版本比這個版本更好。 – 2010-06-12 06:01:00