gnuplot nástroj pro kreslení grafů
Katedra optiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci
gnuplot – nástroj pro kreslení grafů a analýzu ●
●
Smyslem výpočtů je porozumění, ne čísla.
cena
Smyslem výpočtů je porozumění, ne grafy. Citáty R. W. Haminga a L. N. Trefethena z knihy Philippa Janerta „gnuplot v akci“
●
Dow Jonesův index
cena
Čísla a grafy pomáhají porozumět čas
gnuplot – nástroj pro kreslení grafů ●
Vývoj 1986 - 2009
●
Operační systémy
●
●
●
–
Linux/UNIX
–
Windows
–
Mac OS X
Copyright © dává souhlas s užíváním, kopírováním a distribucí pro jakékoliv použití … Poslední verze: gnuplot 4.2.5 (30.3.2009) Podrobnosti na:gnuplot.info
●
●
●
Autoři: Thomas Williams Colin Kelley Russell Lang Dave Kotz John Cambell Gershon Elber a mnoho jiných Hans-Bernhard Broker Ethan A Merritt a mnoho jiných Svobodný software České návody a příklady: V. Jarý (2004): na Linuxsoft.cz P. Pinkas (2001): na Root.cz P. Michálek(2000): mat.fsv.cvut.cz/michalekpe/ Diplomový seminář (2006): http://sirrah.troja.mff.cuni.cz/~mira/diplomovy _seminar/gnuplot/
gnuplot – proč zrovna gnuplot? ●
jednoduchý k užití
●
snadno naučitelný
●
běží „všude“
●
dostupný na učebně, doma a všude kde chceme
●
svobodný software
●
odzkoušený a stabilní
●
stále vylepšovaný
●
2D grafy
●
3D grafy
●
zpracuje i rozsáhlá datová pole
●
●
●
●
Gnuplot je nástroj ke kreslení grafů nic víc, nic méně. provádí jen jednoduché výpočty nemá žádné ambice pro „realistické zobrazení“ Je to jednoduchý nástroj jen pro jednu věc a tuto jednu věc, vykreslení grafů, dělá dobře.
gnuplot – nalezneme na: www.gnuplot.info
gnuplot – příkazový řádek Ve Windows voláme program WGnuplot
gnuplot – vykreslení průběhu y = sin x
gnuplot – vykreslení průběhu dvou funkcí
gnuplot – vykreslení průběhu v jednom grafu
gnuplot – základní operace a funkce Standardní znaky: + * / ** !
pro součet pro rozdíl pro násobení pro dělení pro mocninu faktoriál
Funkce, které požadují, nebo vrací úhly, jsou přednastaveny na radiány. Přepnutí na stupně příkazem set angles degrees Zpětné přepnutí na radiány příkazem set angles radians.
Standardní funkce: abs, sign (absolutní hodnota, znaménko) ceil, floor („zaokrouhlení nahoru a dolů“) sin, cos, tan asin, acos, atan sinh, cosh, tanh asinh, acosh, atanh exp log (logaritmus při základu e) log10 (logaritmus při základu 10) sqrt (druhá odmocnina) besj0, besj1 (Besselovy funkce 1.druhu) besy0, besy1 (Besselovy funkce 2. druhu) random (generuje pseudonáhodné číslo) gamma, ...
Podrobnosti a další funkce viz help functions.
Standardní logické operátory:
== != < <= > >= && || !
rovnost nerovnost menší menší nebo rovno větší větší nebo rovno logické AND (a) logické OR (nebo) negace
Standardně je definována proměnná pi = 3.14159265358979
gnuplot – jako kalkulačka print - zobrazí výsledek výpočtu příslušného výrazu na obrazovku Syntax:
print
{,, … } Konstanty vstupující do výrazů mohou být: celá čísla (např.: 1, -7, 0, ...) reálná čísla (např.: 1.0, -7.0, … ) komplexní čísla (např. 3+2i vstupuje {3,2})
Příklady:
print 6/5 1 print 6.0/5 1.2 print 7*sin(pi/6) 3.5 print ceil(2.0/5) 1
print pi, exp(1), sqrt(-1) 3.14159265358979 2.71828182845905 {0.0, 1.0} a=3; b=-5; c=2 D=b**2-4*a*c x1=(-b+sqrt(D))/(2*a) ; x2=(-b-sqrt(D))/(2*a) print D, x1, x2 1 1.0 0.666666666666667
print floor(2.0/5) 0
a=4 D=b**2-4*a*c x1=(-b+sqrt(D))/(2*a) ; x2=(-b-sqrt(D))/(2*a) print D, x1, x2
print {2.0,3.0}*{4.0,5.0} {-7.0, 22.0}
-7 {0.625, 0.330718913883074} {0.625, -0.3307...}
gnuplot – rozsah os, typ čar plot [0 : 2*pi] [-1.1 : 1.3] sin(x) with lines, cos(x) with impulses
gnuplot – zakreslení os v počátku set zeroaxis linetype -1 linewidth 2.5
#nastaví černou barvu os a jejich šířku
plot [0:4*pi] [-1.2: 1.5] sin(x), sin(x+2*pi/3), sin(x+4*pi/3)
gnuplot – definice uživatelských funkcí set titel 'Bodova rozptylova funkce psf(x)' psf(x)=(2*besj1(x)/x)**2 plot psf(x)
[
2 J 1 I=
2
]
gnuplot – definice funkce ternárním operátorem gnuplot má definován ternární operátor podmínka ? výraz1 : výraz2 Řeší se první podmínka. Je-li pravdivá, tak se vyřeší a vrátí se výraz1, jinak se vyřeší a vrátí výraz2. f(x)=(x>2) ? 2: ((x<-2)?-2:x) plot [-5 : 5] [-2.5 : 2.5] f(x)
gnuplot – více os, popis os set set set set set set set
xrange [0 : 5] yrange [0 : 60] y2range [-150 : 0] xlabel "doba [s]" ylabel "rychlost [m/s]" y2label "hloubka [m]" tics border nomirror
Nastavení globálních podmínek kreslení se provádí přikazy set. Toto nastavení je platné po celou dobu práce, pokud se nezmění přenastavením, nebo se neodstraní odpovídajícími příkazy: unset xlabel, unset ylabel, … , unset tics Lze využít 4 nezávislé osy: x1, x2, y1, y2
plot 9.81*x title 'v=gt' axes x1y1, -0.5*9.81*x**2 title 'h=1/2 gt^2' axes x1y2
gnuplot – parametrické funkce Závislost x na y je zprostředkovaná parametrem t x = f(t) y = g(t) set parametric #zapne režim parametrického zadávání plot [0:10*pi] t*sin(t), t*cos(t)
r=10; d=12 f(t)=r*t – d*sin(t) g(t)=r – d*cos(t) plot [0:20] f(t), g(t)
gnuplot – polární souřadnice Poloho bodu P v rovině lze určit polárními souřadnicemi r, θ . y
x = r sin θ y = r cos θ
P
r θθ
x
set polar
#zapne režim polárního zadávání souřadnic
Vykresluje se funkce r=f(θ) Přednastavení rozsahu změny θ je 0 až 2π Příklad: unset border set xtics axis nomirror set ytics axis nomirror set samples 160 set zeroaxis set trange [0:2*pi] set title "Kruhy"
plot 1.0,2,3
#odstraní orámování grafu #popis x se nebude zdvojovat #popis y se nebude zdvojovat #zvýší počet děleni na 160 #vykreslí osy v bodě 0 #nastaví rozsah θ (tj. t) #napíše nadpis grafu
gnuplot – graf ze souboru dat Mějme datový soubor citlivost_oka.dat, jehož struktura odpovídá tabulce: 400
0.0004
0.0093
410
0.0012
0.0348
420
0.004
0.0966
.....
.....
.....
.....
.....
.....
700
0.0041
0
710
0.0021
0
plot 'citlivost_oka.dat' using 1:2, 'citlivost_oka.dat' using 1:3
gnuplot – graf ze souboru dat, další úpravy set style data lines #graf jako spojitá funkce set style line 1 lt 2 lc rgb "green" lw 3 #nastaveni tloušťky a barvy spojnice 1 set style line 2 lt 1 lc rgb "blue" lw 1 #nastaveni tloušťky a barvy spojnice 2 plot 'citlivost_oka.dat' using 1:2 ls 1, 'citlivost_oka.dat' using 1:3 ls 2 Každý gnuplot terminál poskytuje typické čáry „linotyps“ (lt), které se mohou různit: - barvou (lc), - tloušťkou (lw), - tečkováním nebo čárkováním - kombinací barev, tečkováním nebo čárkováním Defnice barev a čar není u terminálů stejná. lt lt lt lt
-1 je vždy plná černá čára, 1 je obvykle plná červená čára, 2 je obvykle plná zelená řára, 3 je obvykle plná modrá čára, …
Klíčová slova linecolor (lc) a linewidth (lw) umožňují lokálně změnit styl čar. Vlastní uživatelský styl čar umožňuje příkaz nastavení set style line .
gnuplot – dostupné terminály (koncové výstupy) set terminal
●
Linux X11 wxt -samostatná okna dxf –pole pro AutoCad gif –obrazový GIF jpeg –JPEG obrazový formát latex –obrázky v LaTEX png -PNG obrazový výstup postscript -včetně *.eps svg -vektorový fotmát ................................. .................................
●
#vypíše dostupné terminály
Windows windows windows enhanced dxf –pole pro AutoCad gif –obrazový GIF jpeg –JPEG obrazový formát latex –obrázky v LaTEX png -PNG obrazový výstup postscript -včetně *.eps svg -vektorový fotmát ............................... ...............................
gnuplot – test stylu pro různé terminály terminál wxt
terminál x11
terminál windows
gnuplot – terminálové výstupy set terminal png set output 'citlivost_oka.png' replot
# nastaví terminál png # definuje jméno pro výstupní pole
set terminal jpg set output 'citlivost_oka.jpg' replot
# nastaví terminál jpg # definuje jméno pro výstupní pole
set terminal post enh set output 'citlivost_oka.eps' replot
# nastaví terminál enhanced PostScript # definuje jméno pro výstupní pole
set terminal gif set output 'citlivost_oka.gif' replot
# nastaví terminál gif # definuje jméno pro výstupní pole
Pozor: speciální symboly a znaky vyvolávají někdy u různých terminálů problémy. Doporučení: přenos do vhodného formátu realizujte prostřednictvím vhodného grafického editoru. Zvláštní pozornosti zasluhuje grafický editor GIMP. Přechod uskutečníte použitím Ctrl+C > Ctrl+V (alternativa Alt+PrtScr> Ctrl+V).
gnuplot – graf ze souboru dat, hladký průběh plot [380:650] [0:1] 'citlivost_oka.dat' using 1:3 ls 1, 'citlivost_oka.dat' using 1:3 ls 4 smooth cspline title 'cspline'
smooth {
unique | fquency | splines | asplines | bezier | sbezier }
gnuplot – logaritmická osa plot 'citlivost_oka.dat' using 1:2 ls 1 title 'relat',\ 'citlivost_oka.dat' using 1:2 ls 2 title 'log' axes x1y2
set logscale y2
set terminal windows enhanced set title "Spektralni citlivost oka" set set set set
ylabel "relativni citlivost" y2label "log citlivosti" xlabel "{/Symbol=15 l} [nm]" y2range [1e-12:1]
set style data lines set style line 1 lt 2 lc rgb "green" lw 3 set style line 2 lt 1 lc rgb "red" lw 1 set tics border nomirror
gnuplot – data vytvořená jiným programen
set style data lines set zeroaxis plot [0:2*pi] [-1.05:1.05] "gnuplot4.dat" using 1:2 title 'sin (x)' , \ 'gnuplot4.dat' using 1:3 title 'x' , \ 'gnuplot4.dat' using 1:4 title 'x-x^3/3!' , \ 'gnuplot4.dat' using 1:5 title 'x-x^3/3!+x^5/5!' , \ 'gnuplot4.dat' using 1:6 title 'x-x^3/3!+x^5/5!-x^7/7!' , \ 'gnuplot4.dat' using 1:7 title 'x-x^3/3!+x^5/5!-x^7/7!+x^9/9!'
gnuplot – grupová rychlost lambda1=0.5; lambda2=0.6; c=2.99793e16; n1=1.5; n2=1.51 f1=c/lambda1; f2=c/lambda2; v1=c/n1; v2=c/n2 plot [0:3] [-2.1: 2.2] sin(2*pi*f1*(0-x/v1)), sin(2*pi*f2*(0-x/v2)) plot [0:3] [-2.1: 2.2] sin(2*pi*f1*(0-x/v1)) + sin(2*pi*f2*(0-x/v2))
gnuplot – příkaz plot plot je primární příkaz pro ktreslení 2D grafů Syntax: plot {} {} { | {““ {modifikátory datového pole}}} {axes {} {definování názvu} {with <styl>} {, {definice, } .....} př1: př2: př3: př4: př5: př6: př7:
plot plot plot plot plot plot plot
sin(x) [-2*pi : 2*pi] sin(x) sin(x), cos(x) f(x)=sin(x*a), a=0.2, f(x), a=0.4, f(x) „soubor_dat.1“ with lines, „soubor_dat.2“ with points [t=0:90] [-100:100] tan(pi*t/180) [t=0:90] [0:20] tan(pi*t/180) title 'tan x', 10*sin(pi*t/180) title '10 sin x'
př8:
plot 4/(1+x**2) axes x1y1 title 'y=4/(1+x^2)', \ p(x)=(1/(sig*sqrt(2*pi)))*exp(-((x-a)**2)/(2*sig**2)), sig=0.2, a=0, p(x)
př9:
plot [-1:1] \ p(x)=(1/(sig*sqrt(2*pi)))*exp(-((x-a)**2)/(2*sig**2)), sig=0.1, a=0, p(x)\ title 'sigma=0.10', sig=0.15, p(x) title 'sigma=0.15', sig=0.2, p(x) title 'sigma=0.20',\ sig=0.3, p(x) title 'sigma=0.30' , sig=0.5, p(x) title 'sigma=0.50'
gnuplot – přesnost kreslení, mřížka lambda1=0.5; lambda2=0.6; c=2.99793e16; n1=1.5; n2=1.51 f1=c/lambda1; f2=c/lambda2; v1=c/n1; v2=c/n2 set grid set terminal windows 'Grupova rychlost' set samples 100
set terminal windows 'Grupova rychlost – presneji' set samples 1000
plot [0:10] [-2.1: 2.2] sin(2*pi*f1*(0-x/v1)) + sin(2*pi*f2*(0-x/v2))
gnuplot – 3D grafy, příkaz splot splot [x1:x2] [y1:y2] [z1:z2] f(x,y) set xrange [x1 : x2] set yrange [y1 : y2] set autoscale z set view h, v, z set isosamples s1, s2 set isosamples 100,100 set hidden3d
#nastaví meze a vykreslí plochu
#globální nastavení rozsahu osy x #globální nastavení rozsahu osy y # automatické nastavování meyí osy z # nastaví úhel pohledu (h=60, v=30, z=1 vzdálenost) #nastavení dělení (vzorků) na ose x a y splot [0 : 2*pi] [0 : 4*pi] sin(x)*sin(y)
gnuplot – ekvipotenciální čáry set isosamples 50,50 set hidden3d
splot [-4*pi :4*pi] [-4*pi :4*pi] \ sin(sqrt(x**2+y**2))/(sqrt(x**2+y**2))
set contour base
set contour surface
set contour both
gnuplot – zvýraznění pomocí strmosti splot [-10:10] [-10:10] [0:1.5] \ 4*(besj1(sqrt(x**2+y**2))*besj1(sqrt(x**2+y**2))) / (x**2+y**2)\ title '[2 J_1({/Symbol=10 t}) /{/Symbol=10 t}]^2'; set title "Bodova rozptylova funkce" offset 0, 0 font "Ariel, 15" set terminal windows enhanced set set set set set set set set set set
pm3d at st palette gray palette gamma 3 grid key bmargin border 4095 surface samples 100 isosamples 61 ticslevel 0
gnuplot – mnoho možností a účel set surface set palette model RGB
unset surface set palette model CMY positive
unset surface set palette model RGB negative
unset surface set grey scale
set palette gamma 3
gnuplot – test barev test palette # příkaz poskytuje základní informace o barvách set palette model XYZ test palette
set palette model RGB maxcolors 5 set palette defined (0 'blue', 1 'green' , 2 'yellow', 3 'red', 4 'dark-red') test palette
.....
gnuplot – pm3d map, strmost set pm3d map
#Nastavení umožňuje vykreslit příkazem splot 2D mapu # ekvipotenciálních čar.
Pro dříve uvedený příklad grafu „Bodové rozptylové funkce“ dostaneme po aplikaci tohoto nastavení pro různá gamma následované příkazem replot grafy: set palette gamma 0.1
set palette gamma 3
set palette gamma0.5
set palette gamma 5
set palette gamma 1
set palette gamma 10
gnuplot – práce s adresáři a soubory pwd -
zobrazí cestu k aktuálnímu pracovbnímu adresáři
cd -
jméno nového adresáře' - změní aktuální adresář, může se uvést i cesta
save - umožní uložit pod specifikovaným názvem uživatelem definovanou funkci, proměnné, podmínky nastavené příkazem set a poslední příkaz plot (splot). Syntax:
save {}
functions -funkce var -proměnné set -nastavení, term -terminál není-li nic, ukládá se vše
'<jmeno_pole>'
zvolený název v uvozovkách např. 'animace.plt'
load – provede každý příkaz zapsaný na řádcích specifikovaného pole tak, jakoby tyto řádky byly postupně zapisovány v ineraktivním režimu. Syntax:
load '<jmeno_pole>'
gnuplot – vybrané příkazy replot - bez argumentu zajistí opakování posledního příkazu plot, nebo splot. Používá se např. pro nové zobrazení po přenastavení různými příkazy set. Případné argumenty za slovem replot budou doplněny k poslednímu příkazu plot, nebo splot a graf bude znovu vykreslen. Argumenty se oddělují čárkou. Příklad: plot [0 : 2*pi] [-1.2: 1.2] sin(x); replot (x-x**3/3! + x**5/5!) title 'aproximace 5. radu', cos(x); reset -
všechna dříve provedená nastavení pomocí příkazů set budou zrušena a systém bude nastaven na výchozí hodnoty
reread - provádění příkazů určitého příkazového pole, které je specifikované příkazem load bude před tím, než budou přečteny následující příkazy vráceno na začátek. Tím je realizována nekonečná smyčka, nebo s příkazem if konečná smyčka. pause - zobrazí za tímto příkazem specifikovaný text a počká udanou dobu pause <doba v sekundách> {'string'} clear – vymaže aktuální obrazovku. fit –
umožňuje aproximovat závislost specifikovanou datovým polem pomoví zvolené funkce – určí proměnné zvolené funkce metodou nejmenších čtverců fit
{[rozsah x] {[rozsah y]}} '' {datové modifikátory} via '<pole parametrů>' | <proměnná1> {, <proměnná2>, ...}
gnuplot – podmíněný příkaz if, smyčka if -
podmíněný příkaz „jestliže“ if (<podmínka>) [; else if (<podmínka>) ...; else ...]
Spojení reread s if umožní animaci: p=0 load 'smycka10.dat'
#definice souboru smycka10.dat p=p+0.05 plot [0:8*pi] sin(x-p) pause 0.05 if (p<8*pi) reread Nezapomeňte, že datový soubor musí být uložen v aktuálním adresáři, nebo k němu musí být nastavena cesta.
gnuplot – příklad animace set samples 100 set title "Konjunkce" p=10 plot [-15:15] [0:2] 4*((besj1(x))/x)**2+\ 4*((besj1(x-p))/(x-p))**2 load 'smycka_animace.dat';
p=p-0.05 replot pause 0.1 if (p>-10) reread
gnuplot
Zkuste to!