Gnuplot: Porovnání verzí
mBez shrnutí editace |
|||
(Není zobrazeno 15 mezilehlých verzí od stejného uživatele.) | |||
Řádek 1: | Řádek 1: | ||
Gnuplot je interaktivní řádkový program pro kreslení 2D a 3D grafů funkcí a vizualizaci dat. Program byl původně určen pro vědeckou a studentskou vizualizaci matematických funkcí a dat. Program slouží také pro neinteraktivní užití ve skriptech pro web a jako vizualizační nástroj pro ostatní programy jako např. GNU Octave. | |||
Domovská stránka projektu: http://www.gnuplot.info<br> | Domovská stránka projektu: http://www.gnuplot.info<br> | ||
Odkazy na literaturu: | Odkazy na literaturu: | ||
Řádek 75: | Řádek 77: | ||
set arrow from second y1,x1 to second y2,x2 nohead lt 2 | set arrow from second y1,x1 to second y2,x2 nohead lt 2 | ||
==== Vykreslení | ==== Vykreslení elipsy chyb ==== | ||
je možné provést parametrickým vykreslením elipsy v polárních souřadnicích otočených lineární transformací. Tato konstrukce už je poněkud delší a pro vykreslování více elips je vhodné si uložit kód pro její vykreslování do zvláštního souboru např. <code>elipsa.gpi</code> a používat ho jako funkci s pozičními parametry <code>$0 $1 $2 $3 $4</code>. Maximální počet pozičních parametrů je v Gnuplotu stanoven na 10. | je možné provést parametrickým vykreslením elipsy v polárních souřadnicích otočených lineární transformací. Tato konstrukce už je poněkud delší a pro vykreslování více elips je vhodné si uložit kód pro její vykreslování do zvláštního souboru např. <code>elipsa.gpi</code> a používat ho jako funkci s pozičními parametry <code>$0 $1 $2 $3 $4</code>. Maximální počet pozičních parametrů je v Gnuplotu stanoven na 10. | ||
## soubor elipsa.gpi | ## soubor elipsa.gpi | ||
## $0, $1 ... poloosy elipsy | ## $0, $1 ... poloosy elipsy a b | ||
## $2 ... úhel stočení | ## $2 ... úhel stočení v radiánech | ||
## $3, $4 ... souřadnice středu elipsy x, y | |||
## $3, $4 ... souřadnice středu elipsy | |||
set parametric | set parametric | ||
set dummy t | set dummy t | ||
Řádek 88: | Řádek 89: | ||
fy(t) = $1*sin(t) | fy(t) = $1*sin(t) | ||
# lineární transformace | # lineární transformace | ||
fxx(t) = | fxx(t) = fx(t)*cos($2) - fy(t)*sin($2) + $3 | ||
fyy(t) = | fyy(t) = fx(t)*sin($2) + fy(t)*cos($2) + $4 | ||
set sample 40 ## | set sample 40 ## počet bodů pro vykreslení elipsy | ||
plot [0:2*pi] | plot [0:2*pi] fyy(t), fxx(t) axes x2y2 | ||
unset parametric | unset parametric | ||
Řádek 99: | Řádek 100: | ||
a1 = m*2; b1 = m*1; om1 = pi/8 # poloosy elipsy a úhel stočení | a1 = m*2; b1 = m*1; om1 = pi/8 # poloosy elipsy a úhel stočení | ||
a2 = m*3; b2 = m*1; om2 = -pi/8 | a2 = m*3; b2 = m*1; om2 = -pi/8 | ||
call 'elipsa.gpi' a1 b1 om1 y1 | call 'elipsa.gpi' a1 b1 om1 x1 y1 | ||
call 'elipsa.gpi' a2 b2 om2 y2 | call 'elipsa.gpi' a2 b2 om2 x2 y2 | ||
====Výstupní zařízení - terminály==== | ====Výstupní zařízení - terminály==== | ||
Gnuplot nabízí téměř 80 terminálů (formátů) ve kterých zobrazuje výsledky vizualizace. Standartním terminál na linuxu je <code>x11</code>, který zobrazuje grafy v grafickém okně. Pro tisk grafu je vhodné použít např. terminál <code>postscript</code>, <code>pdf</code>, <code>png</code> nebo <code>jpeg</code>. Pro vložení grafu do dokumentu v LaTeXu slouží např. terminály <code>latex</code>, <code>eepic</code>, <code>pstricks</code>, <code>pslatex</code> nebo <code>tpic</code>. Pro další zpracování grafů v programech např. CorelDraw, QCAD, Xfig nebo Grass je možné použít terminály <code>corel</code>, <code>dxf</code>, <code>fig</code> a <code>grass</code>. | |||
Vzhledem k tomu, že jsou výstupní termilály velice rozmanité, je výsledný vzhled grafu závislý na typu terminálu. Nejčastěji se u jednotlivých terminálů odlišují typy čar, barvy, symboly a fonty. | |||
Příkazem <code>set output "jméno_souboru"</code> je možné přesměrovat výstup do souboru. Příkazem <code>set encoding iso_8859_2</code> je možné nastavit kódování znakové sady. Terminály mají mnoho různých voleb, které jsou popsány v oficiální dokumentaci. Přehled všech terminálů získáme příkazem <code>set terminal</code>. | |||
====Poznámky k verzím==== | |||
Ve verzi 4.0 nefunguje: | |||
* parametr <code>rotate</code> u příkazu <code>set xtics</code> | |||
* specifikace souřadného systému <code>graph</code>, <code>screen</code> a <code>character</code> (funguje pouze <code>first</code> a <code>second</code>) | |||
====Shrnutí==== | ====Shrnutí==== | ||
<source lang=' | <source lang='c'> | ||
## hlavní skript | ## hlavní skript | ||
## -------------- | ## -------------- | ||
Řádek 182: | Řádek 193: | ||
## popis čar grafu - legenda | ## popis čar grafu - legenda | ||
unset key | unset key | ||
## body a jejich cisla | ## body a jejich cisla | ||
x1 = 1039747.32; y1 = 745528.16 ## kostel sv. Matěje | x1 = 1039747.32; y1 = 745528.16 ## kostel sv. Matěje | ||
x2 = 1042459.18; y2 = 744233.46 ## chrám sv. Víta | x2 = 1042459.18; y2 = 744233.46 ## chrám sv. Víta | ||
Řádek 218: | Řádek 221: | ||
a1 = m*2; b1 = m*1; om1 = pi/8 | a1 = m*2; b1 = m*1; om1 = pi/8 | ||
a2 = m*3; b2 = m*1; om2 = -pi/8 | a2 = m*3; b2 = m*1; om2 = -pi/8 | ||
call "elipsa.gpi" a1 b1 om1 y1 | call "elipsa.gpi" a1 b1 om1 x1 y1 | ||
call "elipsa.gpi" a2 b2 om2 y2 | call "elipsa.gpi" a2 b2 om2 x2 y2 | ||
unset multiplot | unset multiplot | ||
Řádek 226: | Řádek 229: | ||
</source> | </source> | ||
<source lang=" | <source lang="c"> | ||
## funkce elipsa.gpi | ## funkce elipsa.gpi | ||
## vykresleni elipsy | ## vykresleni elipsy | ||
## $0 $1 ... poloosy | ## $0 $1 ... poloosy a b | ||
## $2 ... uhel | ## $2 ... uhel stočení v radiánech | ||
## $3 $4 ... souřadnice středu x y | |||
## $3 $4 ... | |||
## Author: Tomáš Kubín | |||
## Lincense: GPL | |||
set parametric | set parametric | ||
Řádek 240: | Řádek 245: | ||
fy(t) = $1*sin(t) | fy(t) = $1*sin(t) | ||
# lineární transformace | # lineární transformace | ||
fxx(t) = | fxx(t) = fx(t)*cos($2) - fy(t)*sin($2) + $3 | ||
fyy(t) = | fyy(t) = fx(t)*sin($2) + fy(t)*cos($2) + $4 | ||
set sample 40 ## | set sample 40 ## počet bodů pro vykreslení elipsy | ||
plot [0:2*pi] | plot [0:2*pi] fyy(t), fxx(t) axes x2y2 | ||
unset parametric | unset parametric | ||
</source> | </source> | ||
{{GNU}} | {{GNU}} |
Aktuální verze z 4. 12. 2008, 12:41
Gnuplot je interaktivní řádkový program pro kreslení 2D a 3D grafů funkcí a vizualizaci dat. Program byl původně určen pro vědeckou a studentskou vizualizaci matematických funkcí a dat. Program slouží také pro neinteraktivní užití ve skriptech pro web a jako vizualizační nástroj pro ostatní programy jako např. GNU Octave.
Domovská stránka projektu: http://www.gnuplot.info
Odkazy na literaturu:
Zobrazení souřadnic bodů v S-JTSK
Nastavení os, měřítka a popisu

- zobrazení rámečku grafu se ovládá příkazem
set border x
, kdex
udává součet čísel jednotlivých čar rámečku, které se mají zobrazit. Spodní čára má číslo 1, levá 2, horní 4 a pravá 8.
set border 12
- nastavení velikosti okrajů okolo rámečku se provádí příkazem
set xmargin y
, kdex
je označení okraje:l
pro levý okraj,p
pro pravý,t
pro horní okraj ab
pro spodní.y
označuje velikost okraje v jednotkách velikosti znaku použitého fontu terminálu. Do okraje se umisťuje stupnice os, její popis a titulek grafu.
set lmargin 2 set rmargin 8 set tmargin 8 set bmargin 2
- stupnice na osách se ovládá funkcí
set otics i
, kdeo
je označení osy ai
je velikost dílku osy. Spodní čára rámečku je označena jako osax
, levá čára rámečku jako osay
, horní a pravá čára jako osyx2
ay2
. Standartně je zobrazeno dělení na osex
ay
s tím, že je nastaven parametrmirror
, který provádí zrcadlení dělení na protějších osách. Zrcadlení se vypíná volbounomirror
. Zobrazené dělení je možné vypnout příkazemunset otics
. Otočení popisu dílků osy se provádí volbourotate u
, kdeu
je úhel rotace ve stupních. Kromně hlavního dělení stupnice je možné zobrazit ještě pomocné dělení, které se nepopisuje číly. Zobrazení tohoto dělení se provádí příkazemset motics p
, kdeo
je označení osy ap
počet dílků vedlejší stupnice na dílek v hlavní stupnici.
unset xtics unset ytics set x2tics 100 rotate by 90 set y2tics 100 set mx2tics 5 set my2tics 5
- formát popisu stupnice se ovládá příkazem
set format o "ret"
, kdeo
je označení osy aret
je formátovací řetězec příkazu printf jazyka C.
set format x2 "%.0f" set format y2 "%.0f"
- interval zobrazovaný na osách se nastavuje příkazem
set orange [min:max]
, kdeo
je označení osy. Přepínačemreverse
je možné obrátit směr číslování na ose.
x_min = 1039000 x_max = 1043000 y_min = 744000 y_max = 746000 set y2range [x_min:x_max] reverse ## na osu y2 vynášíme souřadnici x set x2range [y_min:y_max] reverse
- velikost grafu a měřítko na osách se ovládá funkcí
set size a,b ratio c
, kdea,b
jsou poměry velikosti rámečku (os) grafu k velikosti terminálu (okno). Parametr c udává poměr šířky a výšky rámečku. Jednička nastavuje čtverec. Záporná hodnota parametru c má odlišný význam. Udává poměr měřítek os x a y. Když c=-1 je nastaveno stejné měřítko pro x-ovou i y-ovou osu.
set size 1,1 ratio -1
- popis os, nadpis, legenda čar a mřížka se zapíná příkazy
set příkaz
a vypíná příkazyunset příkaz
. Příkazemfont "jmeno_fontu,velikost"
je možné měnit typ a velikost fontu.
set title "Body v S-JTSK" font ",20" set x2label "Y-ová souřadnice" set y2label "X-ová souřadnice" unset key # legenda unset grid # mřížka
Vykreslení bodů s popisem
se může provést příkazem set label "název bodu" at sour_x,sour_y offset odsazení_x,odsazení_y point styl_bodu
, kde název bodu
je řetězec, který se umístí na zadané souřadnice sour_x,sour_y
. Parametrem offset
nastavuje odsazení popisu od značky bodu, jejíž styl se nastavuje parametrem styl_bodu
. Tento parametr může mít tvar linetype t1 pointtype t2 pointsize t3
, kde linetype t1
určuje číslem t1
typ čáry, pointtype t2
určuje typ značky na bodu a pointsize t3
určuje velikost značky jako násobek standartní velikosti značky. Čísla přiřazená k jednotlivým barvám a typům značek získáme zadáním příkazu test
. Barvy a typy značek mohou být pro různé terminály (výstupní zařízení - x11, postscript, png, ...) odlišné.
x1 = 1039747.32; y1 = 745528.16 ## kostel sv. Matěje x2 = 1042459.18; y2 = 744233.46 ## chrám sv. Víta offset_x = 0.01 offset_y = -0.01 set label "Matěj" at second y1,x1 point pt 6 lt 0 ps 1 offset graph offset_x,offset_y set label "Vít" at second y2,x2 point pt 6 lt 0 ps 1 offset graph offset_x,offset_y
Gnuplot definuje několik souřadnicových systémů:
first ... osy x, y second ... osy x2, y2 graph ... levý dolní roh rámečku má souřadnice [0,0] a pravý horní roh [1,1] screen ... stejné jako graph s tím, že se vztahují na celé okno character ... velikost je udávána vzhledem k velikosti aktuálního fontu terminálu
Vykreslení úsečky nebo vektoru
Úsečku je možné vykreslit dvěma způsoby. První využívá standartního způsobu zobrazení dat z datového souboru, a druhý, jednodušší používá příkaz pro vykreslení vektoru set arrow
.
set multiplot # nastavuje mód kreslení více grafů do jednoho okna # chceme-li kreslit více čar do jednoho grafu, # nakreslíme několik grafů s jednotlivými čarami # a umístíme je přes sebe - musíme proto nastavit # rozsahy os funkci set x2range a y2range, aby měli # všechny grafy stejnou velikost plot '-' axes x2y2 with lines linetype 2 745528.16 1039747.32 744233.46 1042459.18 eof
nebo
set arrow from second y1,x1 to second y2,x2 nohead lt 2
Vykreslení elipsy chyb
je možné provést parametrickým vykreslením elipsy v polárních souřadnicích otočených lineární transformací. Tato konstrukce už je poněkud delší a pro vykreslování více elips je vhodné si uložit kód pro její vykreslování do zvláštního souboru např. elipsa.gpi
a používat ho jako funkci s pozičními parametry $0 $1 $2 $3 $4
. Maximální počet pozičních parametrů je v Gnuplotu stanoven na 10.
## soubor elipsa.gpi ## $0, $1 ... poloosy elipsy a b ## $2 ... úhel stočení v radiánech ## $3, $4 ... souřadnice středu elipsy x, y set parametric set dummy t # převod polárních souřadnic na pravoúhlé fx(t) = $0*cos(t) fy(t) = $1*sin(t) # lineární transformace fxx(t) = fx(t)*cos($2) - fy(t)*sin($2) + $3 fyy(t) = fx(t)*sin($2) + fy(t)*cos($2) + $4 set sample 40 ## počet bodů pro vykreslení elipsy plot [0:2*pi] fyy(t), fxx(t) axes x2y2 unset parametric
Volání takto napsané funkce se provádí příkazem call
.
m = 300 # měřítko - zvětšení elipsy a1 = m*2; b1 = m*1; om1 = pi/8 # poloosy elipsy a úhel stočení a2 = m*3; b2 = m*1; om2 = -pi/8 call 'elipsa.gpi' a1 b1 om1 x1 y1 call 'elipsa.gpi' a2 b2 om2 x2 y2
Výstupní zařízení - terminály
Gnuplot nabízí téměř 80 terminálů (formátů) ve kterých zobrazuje výsledky vizualizace. Standartním terminál na linuxu je x11
, který zobrazuje grafy v grafickém okně. Pro tisk grafu je vhodné použít např. terminál postscript
, pdf
, png
nebo jpeg
. Pro vložení grafu do dokumentu v LaTeXu slouží např. terminály latex
, eepic
, pstricks
, pslatex
nebo tpic
. Pro další zpracování grafů v programech např. CorelDraw, QCAD, Xfig nebo Grass je možné použít terminály corel
, dxf
, fig
a grass
.
Vzhledem k tomu, že jsou výstupní termilály velice rozmanité, je výsledný vzhled grafu závislý na typu terminálu. Nejčastěji se u jednotlivých terminálů odlišují typy čar, barvy, symboly a fonty.
Příkazem set output "jméno_souboru"
je možné přesměrovat výstup do souboru. Příkazem set encoding iso_8859_2
je možné nastavit kódování znakové sady. Terminály mají mnoho různých voleb, které jsou popsány v oficiální dokumentaci. Přehled všech terminálů získáme příkazem set terminal
.
Poznámky k verzím
Ve verzi 4.0 nefunguje:
- parametr
rotate
u příkazuset xtics
- specifikace souřadného systému
graph
,screen
acharacter
(funguje pouzefirst
asecond
)
Shrnutí
## hlavní skript
## --------------
## * vykreslení bodů v S-JTSK
## * vykreslení elips chyb
## * vykreslení úseček
## --------------
## Author: Tomáš Kubín
## Lincense: GPL
## terminál
#set terminal png size 800,600
#set output "graf.png"
#set terminal postscript eps size 13cm,13cm font 15
#set output "graf.eps"
## rámeček - border
## 4
## ---
## 2 | | 8
## ---
## 1
set border 12
## velikosti okrajů okolo rámečku
## v jednotkách velikosti fontu terminálu
## t
## ---
## l | | r
## ---
## b
set lmargin 2
set bmargin 2
set rmargin 8
set tmargin 8
## stupnice na osách
## x2
## ---
## y | | y2
## ---
## x
unset xtics
unset ytics
set x2tics 1000 rotate by 90
set y2tics 1000
## drobnější dělení na osách
set mx2tics 5
set my2tics 5
## formát čísel na osách a orientace
set format x2 "%.0f"
set format y2 "%.0f"
## rozsah os
x_min = 1039000
x_max = 1043000
y_min = 743000
y_max = 747000
set y2range [x_min:x_max] reverse
set x2range [y_min:y_max] reverse
## velikost grafu
#set size 1,1 ratio -1
## popis os
set title "Body v S-JTSK" font ",20"
set x2label "Y-ová souřadnice"
set y2label "X-ová souřadnice"
## grid
unset grid
## popis čar grafu - legenda
unset key
## body a jejich cisla
x1 = 1039747.32; y1 = 745528.16 ## kostel sv. Matěje
x2 = 1042459.18; y2 = 744233.46 ## chrám sv. Víta
offset_x = 0.01
offset_y = -0.01
set label "Matěj" at second y1,x1 point pt 6 lt 0 ps 1 offset graph offset_x,offset_y
set label "Vít" at second y2,x2 point pt 6 lt 0 ps 1 offset graph offset_x,offset_y
## více grafů na jeden list
set multiplot
## vykreslení úsečky - datový soubor
plot '-' axes x2y2 with lines lt 2
745528.16 1039747.32
744233.46 1042459.18
eof
## vykreslení úsečky - příkaz set arrow
set arrow from second y1,x1 to second y2,x2 nohead lt 2
## vykreslení elipsy
## a b ... poloosy elipsy
## om ... úhel stočení
## m ... měřítko zvětšení elipsy
m = 300
a1 = m*2; b1 = m*1; om1 = pi/8
a2 = m*3; b2 = m*1; om2 = -pi/8
call "elipsa.gpi" a1 b1 om1 x1 y1
call "elipsa.gpi" a2 b2 om2 x2 y2
unset multiplot
pause -1
## funkce elipsa.gpi
## vykresleni elipsy
## $0 $1 ... poloosy a b
## $2 ... uhel stočení v radiánech
## $3 $4 ... souřadnice středu x y
## Author: Tomáš Kubín
## Lincense: GPL
set parametric
set dummy t
# převod polárních souřadnic na pravoúhlé
fx(t) = $0*cos(t)
fy(t) = $1*sin(t)
# lineární transformace
fxx(t) = fx(t)*cos($2) - fy(t)*sin($2) + $3
fyy(t) = fx(t)*sin($2) + fy(t)*cos($2) + $4
set sample 40 ## počet bodů pro vykreslení elipsy
plot [0:2*pi] fyy(t), fxx(t) axes x2y2
unset parametric