在Enthought的Chaco中,TimeFormatter类用于格式化滴答的时间字符串
标签。有没有一种方法可以指定时间格式(类似于time.strftime())。

现在,当将月份的月份和日期显示为美式风格(MMDD)时,源代码现在会将格式进行硬编码。我想增加一些灵活性,以便将时间/日期格式提示以某种方式传递给TimeFormatter
我不知道有什么好办法(除了更改源代码本身(TimeFormatter._formats字典))

最佳答案

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

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

如果您不想这样做,则需要将TimeFormatter子类化。这很容易。更麻烦的是让chaco.scales包创建的所有现有磅秤系统都使用新的子类,而不是内置的TimeFormatter。如果查看scales.time_scale.TimeScale,它在构造函数中接受一个'formatter'关键字参数。因此,在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用户邮件列表中注册...

关于python chaco轴标签时间格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2173632/

10-12 21:49