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

È stato utile?

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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top