Portál AbcLinuxu, 30. dubna 2025 12:39

Jak na čas a datumy v matplotlib.

19.5.2009 23:07 | Přečteno: 847× | poslední úprava: 20.5.2009 08:25

Matplotlib je knihovna umožňující kreslit docela pěkné grafy a to přímo z mého oblíbeného Pythonu. Dnes jsem řešil problém s kreslením grafu, kde jedna osa má být časová — s datumy.

Matplotlib v modulu pylab obsahuje funkci plot_date(), kterou jsem dříve používal a stačila mi. Tato funkce umí zobrazit ordinální hodnotu data, získanou pomocí date2num() jako krásné, do řetězce formátované datum.

import pylab as pl
import datetime as dt

# Připravíme data.
dates=[dt.date(2007, 5,10),
       dt.date(2008,11,13),
       dt.date(2008,12,11),
       dt.date(2009,5,19)]
means=pl.randn(len(dates))

# Kreslíme.
pl.plot_date(pl.date2num(dates), means, "-")

# Hold your hats, it is show time!
pl.show()
Dnes jsem ovšem potřeboval vyrobit errorbar graf, který má na vodorovné ose data, což asi vylučuje použití plot_date().

Jak už to bývá, řešením je RTFM, ale tentokrát toho na toto téma v TFM nebylo mnoho napsáno. Ovšem stačilo to a vykouzlil následující kód, který snad všecko vysvětlí sám

import matplotlib.dates as md

# Příprava dat.
variances=pl.randn(len(means))
mean_vars_plot = pl.subplot(1, 1, 1)

# Kreslíme.
pl.errorbar(pl.date2num(dates), means, variances)

# Tady je to kouzlo -- změníme lokátor ticků na ose
dl = md.AutoDateLocator()
mean_vars_plot.xaxis.set_major_locator(dl)

# a změníme formátovač popisků.
mean_vars_plot.xaxis.set_major_formatter(
          md.AutoDateFormatter(dl) )

# Pochlubíme se výsledkem
pl.show()

Pokud si ještě trochu pohrajete se zoomem a polohou, výsledný graf může vypadat třeba nějak takhle pěkně: graf

Nakonec bych rád upozornil, že když jsem měl nastavování xaxis někde před kreslícími příkazy, dostával jsem záhadné výjimky ValueError: ordinal must be >= 1, tak si na to dávejte pozor.

Update: vyměnil jsem graf za nějaký, který lépe ukazuje data i s měsíci, ale taky to, že mám ještě problém s diakritikou. Matplotlib evidentně používá nějaký neobsáhlý font.

       

Hodnocení: 100 %

        špatnédobré        

Obrázky

Jak na čas a datumy v matplotlib., obrázek 1 Jak na čas a datumy v matplotlib., obrázek 2

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

Jiří P. avatar 20.5.2009 10:46 Jiří P. | skóre: 24 | blog: programování
Rozbalit Rozbalit vše Re: Jak na čas a datumy v matplotlib.
Odpovědět | Sbalit | Link | Blokovat | Admin

ano-taky už jsem to kdysi řešil - je třeba nastavit jiný font.

In a world without fences and walls, who needs Gates and Windows?
23.5.2009 11:33 Jary | skóre: 30 | blog: Jary má blog | Dům
Rozbalit Rozbalit vše Re: Jak na čas a datumy v matplotlib.

Ba ne, právě jsem zjistil, že jsem kecal - chyba byla asi v kódování. matplotlib používá, myslím, gtk a to chce zřejmě unicode, kdežto já předával popisky v utf8. Takže použití U"" stringů pomohlo.

.sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky. GitHub

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.