pitone chaco all'asse formattazione etichette tempo
Domanda
di In Enthought Chaco, la classe TimeFormatter
viene utilizzata per formattare la stringa di tempo della zecca
etichette. c'è un modo per specificare il formato dell'ora (qualcosa come time.strftime()
).
il codice sorgente ora hard-codici del formato nella visualizzazione mese e giorno del mese allo stile americano (MMGG). Vorrei aggiungere una certa flessibilità in modo che i suggerimenti di formato data / ora sarebbero in qualche modo essere passati al TimeFormatter
Non so di qualsiasi bel modo per fare questo (altro che cambiare il codice sorgente in sé (dizionario TimeFormatter._formats
))
Soluzione
Onestamente, il modo più semplice sarà per monkeypatch _formats del TimeFormatter Dictionary:
from enthought.chaco.scales.formatters import TimeFormatter
TimeFormatter._formats['days'] = ('%d/%m', '%d%a',)
Se non si vuole fare questo, allora avete bisogno di sottoclasse TimeFormatter. Questo è facile. Cosa c'è di più ingombrante è rendere tutti i sistemi esistenti di scala che il pacchetto chaco.scales crea utilizzare la nuova sottoclasse, piuttosto che il built-in TimeFormatter. Se si guarda scales.time_scale.TimeScale, che accetta un 'formattatore' argomento chiave nel costruttore. Quindi, in fondo time_scale.py, quando la lista MDYScales è costruita, che avrebbe dovuto creare il proprio:
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())]
Poi, quando si crea lo ScalesTickGenerator, è necessario passare a queste scale alla ScaleSystem:
euro_scale_system = CalendarScaleSystem(*(HMSScales + EuroMDYScales))
tick_gen = ScalesTickGenerator(scale=euro_scale_system)
Quindi è possibile creare l'asse, dandogli questo generatore tick:
axis = PlotAxis(tick_generator = tick_gen)
HTH, mi dispiace questo è circa un mese di ritardo. Io in realtà non controllare StackOverflow molto. Se avete altre domande Chaco, mi consiglia di firma sui Chaco-users mailing list ...