python - Matplotlib autodatelocator 自定义日期格式?

标签 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

有更好的方法吗?

最佳答案

是否AutoDateFormatter做你想做的事?即使没有,您也可能需要查看其源代码,以了解一种更紧凑的方式来实现格式字符串的选择。

在发布版本中,您不能自定义每级格式,但在development code你可以。您可能只需将版本从主干复制到您自己的代码中。

关于python - Matplotlib autodatelocator 自定义日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3002155/

相关文章:

python - 在 matplotlib 中将直线拟合到对数对数曲线

javascript - Python/Javascript 数字精度

python - 如何调整matplotlib图例框的大小

python - 在没有互联网访问权限的 rhel 6 上的虚拟 python 环境(virtualenv 或 pyvenv)中安装 rpm 包

python - 是否可以删除 python 中字节的最后一个字节?

python - matplotlib 条形图的顺序不正确

python - 删除被遮挡的散点图点

matplotlib - 在wx中嵌入透明matplotlib图形 Canvas

python - 如何使用反向分割线?

python - 使用 minidom.toprettyxml 时的空行