Gnuplot: Porovnání verzí
| Řádek 229: | Řádek 229: | ||
## vykresleni elipsy | ## vykresleni elipsy | ||
## $0 $1 ... poloosy | ## $0 $1 ... poloosy | ||
## $2 ... uhel stoceni | ## $2 ... uhel stoceni v radiánech | ||
## $3 $4 ... posuny | ## $3 $4 ... posuny | ||
Verze z 17. 11. 2008, 20:42
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í elips 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 ## $2 ... úhel stočení v radiánech ## $3, $4 ... souřadnice středu elipsy 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 ## pocet bodu plot [0:2*pi] fxx(t), fyy(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 y1 x1 call 'elipsa.gpi' a2 b2 om2 y2 x2
Výstupní zařízení - terminály
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
## souřadnice
## first - osy x,y
## second - osy x2, y2
## graph - [0,0] (levý dolní roh) az [1,1] (pravý horní roh) v rámečku grafu
## screen - [0,0] až [1,1] v celém okně
## character - pozice ve znacích
## body a jejich cisla
## offset - posun
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 y1 x1
call "elipsa.gpi" a2 b2 om2 y2 x2
unset multiplot
pause -1
## funkce elipsa.gpi
## vykresleni elipsy
## $0 $1 ... poloosy
## $2 ... uhel stoceni v radiánech
## $3 $4 ... posuny
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 ## pocet bodu
plot [0:2*pi] fxx(t), fyy(t) axes x2y2
unset parametric