Question

Dans Chaco Enthought, la classe TimeFormatter est utilisé pour formater la chaîne temporelle de la tique Étiquettes. est-il un moyen de spécifier le format de temps (quelque chose comme time.strftime()).

le code source maintenant difficile codes lors de l'affichage du format de mois et le jour du mois au style américain (MMJJ). Je voudrais ajouter une certaine flexibilité afin que les conseils de format heure / date serait en quelque sorte transmis au TimeFormatter

Je ne sais pas de quelle belle façon de le faire (autre que la modification du code source lui-même (TimeFormatter._formats dictionnaire))

Était-ce utile?

La solution

Honnêtement, la façon la plus simple va être de dictionnaire de monkey-patch _formats du TimeFormatter:

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

Si vous ne voulez pas faire cela, alors vous devez sous-classe TimeFormatter. C'est facile. Ce qui est plus lourd fait tous les systèmes existants à l'échelle que le paquet crée chaco.scales utiliser votre nouvelle sous-classe plutôt que le TimeFormatter intégré. Si vous regardez scales.time_scale.TimeScale, il accepte un argument de mot-clé « formatter » dans le constructeur. Donc, au fond de time_scale.py, lorsque la liste des MDYScales est construit, vous auriez à créer votre propre:

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())]

Ensuite, lorsque vous créez le ScalesTickGenerator, vous devez passer dans ces échelles au ScaleSystem:

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

Ensuite, vous pouvez créer l'axe, lui donnant ce générateur de tick:

axis = PlotAxis(tick_generator = tick_gen)

HTH, désolé c'est d'environ un mois de décalage. Je ne suis pas vraiment vérifier StackOverflow beaucoup. Si vous avez d'autres questions chaco, je recommande l'inscription sur la liste de diffusion chaco utilisateurs ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top