Gnuplot
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, kdexudá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, kdexje označení okraje:lpro levý okraj,ppro pravý,tpro horní okraj abpro spodní.yoznač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, kdeoje označení osy aije 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 osyx2ay2. Standartně je zobrazeno dělení na osexays 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, kdeuje ú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, kdeoje označení osy appoč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", kdeoje označení osy aretje 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], kdeoje označení osy. Přepínačemreverseje 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,bjsou 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říkaza 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
rotateu příkazuset xtics - specifikace souřadného systému
graph,screenacharacter(funguje pouzefirstasecond)
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