axe python chaco étiquettes de mise en forme du temps
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))
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 ...