Portál AbcLinuxu, 4. května 2025 23:06

Dotaz: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?

30.4.2012 16:52 8595013
gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
Přečteno: 270×
Odpovědět | Admin
Dobrý den.
http://imageshack.us/photo/my-images/191/98083526.png/
Potřebuji, aby vykreslovaná čára končila například v čase 12 a dále byl graf už jen prázdný. Potíž je v tom, že všechna zdrojová data mám v jediném souboru ve formátu..
[2009/05/11 07:30:00] 0
[2009/05/11 07:31:00] 0.00999983333416666468
[2009/05/11 07:32:00] 0.01999866669333307936
[2009/05/11 07:33:00] 0.02999550020249566076
[2009/05/11 07:34:00] 0.03998933418663415945
[2009/05/11 07:35:00] 0.04997916927067832879
[2009/05/11 07:36:00] 0.05996400647944459919
[2009/05/11 07:37:00] 0.06994284733753276397
[2009/05/11 07:38:00] 0.07991469396917268730
[2009/05/11 07:39:00] 0.08987854919801104969
..a nastavím-li..
set timefmt "[%Y/%M/%d %H:%M:%S]"
set xdata time
set format x "%H"
set xrange ["[2009/05/11 07:30:00]":"[2009/05/12 07:29:00]"]
plot ["[2009/05/11 07:30:00]":"[2009/05/11 12:00:00]"] "/data" using 1:3 with lines
..tak dostanu..
http://imageshack.us/photo/my-images/850/13640905.png/
Je-jasné, že nastavení rozsahu ovlivní rozsah zadaný v příkazu 'plot'. Lze nějak zařídit, aby se u předem dané x-ové hodnoty přestala data vykreslovat a výstup se uložil v daném stavu?

Díky.

Řešení dotazu:


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

Odpovědi

30.4.2012 18:33 Petr
Rozbalit Rozbalit vše Re: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslím, že by mělo být "m" místo "M":
set timefmt "[%Y/%m/%d %H:%M:%S]"
Při testování doporučuji
set format x "[%Y/%m/%d\n%H:%M:%S]"

Je zbytečné zadávat rozsah pomocí xrange i plot [], protože pak má přednost rozsah v parametru plotu (a vypíná to zoomování rozsahu na ose x myší).

V gnuplotu 4.6.0 mi to funguje dle očekávání.
30.4.2012 19:55 8595013
Rozbalit Rozbalit vše Re: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
Nevím, jak si představit
funguje dle očekávání
, ale předpokládám, že tím myslíš situaci, že Gnuplot přestane vykreslovat čáru a graf je tak uložen nehotový - tedy přesně tak, jak "tazatel požaduje". Tohle řešení ale (pravděpodobně) nesplňuje podmínku, že ve zpracovávaném souboru ještě nějaká data jsou.

Respektive Gnuplot se ti zastaví z důvodu, že již v souboru s daty žádné další nevykreslené hodnoty nejsou. Jenže já bych potřeboval, aby se zastavil i přestože v souboru s daty ještě nějaké nevykreslené hodnoty jsou. Ufff.

Obsah datového souboru:
http://pastebin.com/vwUwRy9D
Nicméně díky alespoň za snahu pomoci.

PS: Pakliže jsem tvé řešení pochopil špatně, tak bude problém v mém Gnuplotu 4.4, ale nevsázel bych na to.
1.5.2012 11:38 Petr
Rozbalit Rozbalit vše Re: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
Pokud chci mít prázdné místo kolem grafu křívky, tak k tomu slouží příkaz set offset. Konkrétně tedy v tomto případě časové osy x:
set offset 4*3600,4*3600
Řešení 1× (8595013 (tazatel))
Josef Kufner avatar 30.4.2012 23:38 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
Koukni do manuálu na slovíčko "every" (strana 78 v pdf). To nastavuje po kolika od kterého po který řádek to má načítat data.

Pomocí xrange ořezáváš graf, nikoliv kreslená data.
Hello world ! Segmentation fault (core dumped)
1.5.2012 10:12 l4m4
Rozbalit Rozbalit vše Re: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
Omezení pomocí řádků vyžaduje počítat řádky a umožňuje pouze jednoduchá omezení. To je většinou na nic.

Kreslit části funkcí lze tak, že se vynechané intervaly nahradí NaN, což jde s using pomocí x-ové hodnoty, y-ové hodnoty, nebo klidně hodnoty úplně jiného sloupce. Trivální příklad:
plot cos(3*x) > 0 ? sin(x) : 0/0
1.5.2012 11:43 Petr
Rozbalit Rozbalit vše Re: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
Řešení pomocí ternárního operátoru je možné; pro obyčejná numerická data na ose je to jednoduché:
plot 'data.dat' using 1:($1 > 5 || $1 < 10 ? 1/0 : $3)
pro časová data trošku složitější:
set xrange ["[2009/05/11 12:00:00]":"[2009/05/12 02:00:00]"]

myfmt = "%Y/%m/%d %H:%M:%S"
x1=strptime(myfmt, "2009/05/11 12:00:00")
x2=strptime(myfmt, "2009/05/12 04:00:00")
plot "data2.dat" using 1:(timecolumn(1) < x1 || timecolumn(1) > x2 ? 1/0 : $3) with linespoints
Ale pomocí set offset (viz můj příspěvek výše) je to zjevně jednodušší.
1.5.2012 22:09 l4m4
Rozbalit Rozbalit vše Re: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
No, jasně. Existují různé mechanismy, jak udělat ořezání na okrajích. Nakone ale stejně většinou skončím u nahrazování dat NaN, protože to umožňuje vynechat je kdekoli.
1.5.2012 00:14 honzik90
Rozbalit Rozbalit vše Re: gnuplot : Jak zamezit roztažení grafu na viditelnou plochu?
Odpovědět | | Sbalit | Link | Blokovat | Admin
CVUT FIT BI-SKJ semestralka

ja bych se podival spise na edux https://edux.fit.cvut.cz/courses/BI-SKJ/_export/s5/lectures/tools/start nastavis xrange max a min z celyho souboru a potom budes pomoci sedu do toho cpat jen cast kterou chces zobrazit .. tedy jen do tech 12 hodin ....

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.