【问题标题】:python chaco axis labels time formattingpython chaco轴标签时间格式
【发布时间】:2011-01-11 12:45:31
【问题描述】:

在Enthought的Chaco中,TimeFormatter类用于格式化tick的时间字符串 标签。有没有办法指定时间格式(类似于time.strftime())。

源代码现在将显示月份和日期时的格式硬编码为美式 (MMDD)。我想增加一些灵活性,以便以某种方式将时间/日期格式提示传递给TimeFormatter

我不知道有什么好的方法可以做到这一点(除了更改源代码本身(TimeFormatter._formatsdictionary))

【问题讨论】:

    标签: python chaco


    【解决方案1】:

    老实说,最简单的方法是对 TimeFormatter 的 _formats 字典进行猴子补丁:

    from enthought.chaco.scales.formatters import TimeFormatter
    TimeFormatter._formats['days'] = ('%d/%m', '%d%a',)
    

    如果您不想这样做,那么您需要继承 TimeFormatter。这很简单。更麻烦的是使 chaco.scales 包创建的所有现有比例系统都使用您的新子类而不是内置的 TimeFormatter。如果您查看 scales.time_scale.TimeScale,它在构造函数中接受“格式化程序”关键字参数。因此,在 time_scale.py 的底部,当 MDYScales 列表被构建时,您必须创建自己的:

    EuroMDYScales = [TimeScale(day_of_month=range(1,31,3), formatter=MyFormatter()),
                 TimeScale(day_of_month=(1,8,15,22), formatter=MyFormatter()),
                 TimeScale(day_of_month=(1,15), formatter=MyFormatter()),
                 TimeScale(month_of_year=range(1,13), formatter=MyFormatter()),
                 TimeScale(month_of_year=range(1,13,3), formatter=MyFormatter()),
                 TimeScale(month_of_year=(1,7), formatter=MyFormatter()),
                 TimeScale(month_of_year=(1,), formatter=MyFormatter())]
    

    然后,当您创建 ScalesTickGenerator 时,您需要将这些比例传递给 ScaleSystem:

    euro_scale_system = CalendarScaleSystem(*(HMSScales + EuroMDYScales))
    tick_gen = ScalesTickGenerator(scale=euro_scale_system)
    

    然后你可以创建轴,给它这个刻度生成器:

    axis = PlotAxis(tick_generator = tick_gen)
    

    HTH,抱歉,延迟了大约一个月。我并没有真正检查 StackOverflow。如果您还有其他 chaco 问题,我建议您注册 chaco-users 邮件列表...

    【讨论】:

    • 请注意,如果您使用TimeFormatter._format解决方案,必须在其他chaco import语句之前设置,否则无效。
    猜你喜欢
    • 2017-04-09
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2019-06-28
    • 2017-03-16
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    相关资源
    最近更新 更多