Matplotlib 自动日期定位器自定义日期格式?
我正在使用Matplotlib这个工具,从数据库动态生成.png格式的图表。用户可以选择任何时间范围作为x轴,而我需要考虑到所有这些情况。虽然Matplotlib有一个叫dates.AutoDateLocator()的功能,但我希望图表上显示的日期时间格式能够根据具体情况来调整。比如说,如果用户绘制的是下午3点到5点的图表,那么就不需要显示年份、月份和日期的信息。目前,我是手动创建Locator和Formatter对象,像这样:
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
有没有更好的方法来做到这一点呢?
1 个回答
2
你觉得AutoDateFormatter能满足你的需求吗?即使它不能,你也可以看看它的源代码,里面有一种更简洁的方法来选择格式字符串。
在发布的版本中,你不能自定义每个级别的格式,但在开发代码中是可以的。你可以把主干中的版本复制到你自己的代码里。