Portál AbcLinuxu, 9. května 2025 21:06

Dotaz: python + gnuplot + time na ose x

19.6.2012 15:43 Peter S.
python + gnuplot + time na ose x
Přečteno: 308×
Odpovědět | Admin
Ahoj

celý den sa morím s jedným skriptom (python) ktorý ma použiť gnuplot a urobiť graf. Graf je fakt primitívny - jedna čiara. V shelly by som to asi nejako dal dokopy ale python ma takú nejasnú syntax. Takže výcuc z môjho skriptu je:
import Gnuplot

data=[['19/06/2012-12:27:49', '0.83'], ['19/06/2012-12:27:51', '0.00'], ['19/06/2012-12:27:53', '11.78'], ['19/06/2012-12:27:55', '0.00'], ['19/06/2012-12:27:57', '0.60'], ['19/06/2012-12:27:59', '0.00'], ['19/06/2012-12:28:01', '0.00'], ['19/06/2012-12:28:03', '0.80'], ['19/06/2012-12:28:05', '0.00'], ['19/06/2012-12:28:07', '0.00'], ['19/06/2012-12:28:09', '0.00'], ['19/06/2012-12:28:11', '0.60'], ['19/06/2012-12:28:13', '0.00']]

chart=Gnuplot.Gnuplot(persist=1)

chart('set terminal png')
chart('set out "out.png')
chart('set xdata time')
set_timefmt='set timefmt "%d/%m/%Y-%H:%M:%S"'
chart(set_timefmt)
set_xformat='set format x "%d/%m-%H:%M"'
chart(set_xformat)
chart('set ylabel "%"')
chart('set yrange [0:1]')

chart('set grid')
chart('set style data lines')


for d in data:
	chart.plot(d[0],d[1])
Výstup v konzole vyzerá takto:
gnuplot> plot 19/06/2012-12:27:49 , 0.83 
                           ^
         line 0: ';' expected


gnuplot> plot 19/06/2012-12:27:51 , 0.00 
                           ^
         line 0: ';' expected
a opakuje sa to dalej. Graf nejaký vytvorí ale bez údajov (čiary) a s nezmyselnými dátumami

Budem vdačný za každú pomoc, dokumentácia alebo príklady pre túto kombináciu teda python+gnuplot+časová os prakticky na google nie sú, resp. dokonca som našiel nezodpovedanú otázku presne s týmto problémom...

Takže vopred vďaka

PS: Teoreticky môžem použiť inú utilitu na robenie grafov, python by mal ostať a dotyčná utilita by mala byť dostupná aj na python3
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

19.6.2012 21:05 l4m4
Rozbalit Rozbalit vše Re: python + gnuplot + time na ose x
Odpovědět | | Sbalit | Link | Blokovat | Admin
Modul Gnuplot nepoužívám -- buď python-friendly matplotlib, nebo vygeneruji vstup pro gnuplot a prostě ho spustím.

Každopádně v
chart('set out "out.png')
ti chybí uvozovka a
for d in data:
	chart.plot(d[0],d[1])
dělá přesně, co mu říkáš. Bere postupně prvky z pole data a dává je vždy jako argumenty příkazu plot, tj spouští postupně
plot 19/06/2012-12:27:49, 0.83
plot 19/06/2012-12:27:51, 0.00
...
Pokud to pole má obsahovat data k vykreslení, tak se musí buď dát do souboru, nebo použít nějakou vychytávku toho modulu, která to udělá za tebe, existuje-li (nevím, neznám, nepoužívám).

Pokud chceš opravdu pro každý prvek toho pole nakreslit samostatný jednobodový graf, tak by mělo stačit přidet těm hodnotám uvozovky.
20.6.2012 09:17 Peter S.
Rozbalit Rozbalit vše Re: python + gnuplot + time na ose x
Tak som rezignoval na gnuplot, robim to s matplotlib, funguje to, ešte to kozmeticky upravím.

Keby to niekoho zajímalo tak funguje to takto:

dates=['2012/06/20 09:09:52', '2012/06/20 09:09:54', '2012/06/20 09:09:56', '2012/06/20 09:09:58', '2012/06/20 09:10:00']

a samotný kod:
dates2 = [dateutil.parser.parse(s) for s in dates]
pylab.plot_date(pylab.date2num(dates2), amounts, linestyle='-') 
pylab.savefig("out.png")
V každom prípade vďaka zo odpoved...
rADOn avatar 20.6.2012 13:09 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: python + gnuplot + time na ose x
Odpovědět | | Sbalit | Link | Blokovat | Admin
Syntaxe pythonu je jasna jako mesic v uplnku :-) Ta chyba neni z pythonu ale z gnuplotu.

Neni to nahodou tim ze ta cast kterou sezral ("19/06/2012-12") je korektni matematickej vyraz? Tedy ze plot to nevidi jako datum? Nemaji tam byt nejaky uvozovky nebo tak neco?
"2^24 comments ought to be enough for anyone" -- CmdrTaco

Založit nové vláknoNahoru

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

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