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
, 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 vzhled grafu závislý na typu terminálu. Nejčastěji se u jednotlivých terminálů odlišují typy čar, barvy a symboly.
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