Frage

In Enthought des Chaco wird die TimeFormatter Klasse verwendet, um die Zeit-String der Zecke zu formatieren Etiketten. gibt es eine Möglichkeit, das Zeitformat (so etwas wie time.strftime()) angeben.

Der Quellcode jetzt hart codiert das Format bei der Anzeige von Monat und Tag des Monats an die amerikanischen (MMDD). Ich möchte eine gewisse Flexibilität hinzuzufügen, so dass die Zeit / Datumsformat Hinweise würde irgendwie an die TimeFormatter weitergegeben werden

Ich weiß nicht, jede schöne Möglichkeit, dies (außer Änderung des Quellcodes selbst (TimeFormatter._formats Wörterbuch))

zu tun
War es hilfreich?

Lösung

Ehrlich gesagt, ist der einfachste Weg sein wird, die TimeFormatter des _formats monkeypatch Wörterbuch:

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

Wenn Sie nicht dies tun wollen, dann müssen Sie TimeFormatter Unterklasse. Das ist einfach. Was umständlicher ist wird alle bestehenden Waagensysteme machen, dass die chaco.scales Paket Ihre neue Unterklasse verwenden erstellt, anstatt die eingebaute in TimeFormatter. Wenn Sie bei scales.time_scale.TimeScale suchen, nimmt es eine ‚Formatierer‘ Keyword-Argument im Konstruktor. Also, am unteren Rand des time_scale.py, wenn die MDYScales Liste erstellt wird, müssten Sie Ihre eigene erstellen:

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

Wenn Sie dann den ScalesTickGenerator erstellen, müssen Sie auf die ScaleSystem in diesen Skalen weitergeben müssen:

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

Dann können Sie die Achse, übernimmt es diese Zecke Generator geben:

axis = PlotAxis(tick_generator = tick_gen)

HTH, sorry das ist etwa ein Monat liegt. Ich weiß nicht wirklich überprüfen Stackoverflow sehr. Wenn Sie andere chaco Fragen haben, würde ich die Anmeldung auf den Chaco-Benutzern empfehlen Mailing-Liste ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top