форматирование времени меток оси Python Chaco - PullRequest
5 голосов
/ 01 февраля 2010

В Chaco Enthought класс TimeFormatter используется для форматирования временной строки тика этикетки. Есть ли способ указать формат времени (что-то вроде time.strftime()).

исходный код теперь жестко кодирует формат при отображении месяца и дня месяца в американском стиле (MMDD). Я хотел бы добавить некоторую гибкость, чтобы подсказки формата времени / даты каким-то образом передавались в TimeFormatter

Я не знаю ни одного хорошего способа сделать это (кроме изменения самого исходного кода (TimeFormatter._formats словарь))

1 Ответ

4 голосов
/ 11 февраля 2010

Честно говоря, самый простой способ - это установить обезьяны в словарь _Formats TimeFormatter:

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

Если вы не хотите этого делать, вам нужно создать подкласс TimeFormatter. Это легко. Еще более громоздким является то, что все существующие системы масштабирования, создаваемые пакетом chaco.scales, используют ваш новый подкласс, а не встроенный TimeFormatter. Если вы посмотрите на scale.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-users ...

...