Matplotlib autodatelocator自定义日期格式?

时间:2010-06-08 23:41:49

标签: python 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 个答案:

答案 0 :(得分:1)

AutoDateFormatter能做你想做的吗?即使它没有,您可能需要查看其源代码,以获得更简洁的方式来实现格式字符串的选择。

在发布的版本中,您无法自定义每个级别的格式,但可以在development code中自定义。您可以将版本从主干复制到您自己的代码中。