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 angles degrees Zpětné přepnutí na radiány příkazem 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 <výraz> {,<výraz>, } 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 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í 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 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. 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: un xlabel, un ylabel,, un 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) 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 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: un border xtics axis nomirror ytics axis nomirror samples 160 zeroaxis trange [0:2*pi] 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 style data lines #graf jako spojitá funkce style line 1 lt 2 lc rgb "green" lw 3 #nastaveni tloušťky a barvy spojnice 1 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í style line.
gnuplot dostupné terminály (koncové výstupy) 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 terminal png output 'citlivost_oka.png' replot # nastaví terminál png # definuje jméno pro výstupní pole terminal jpg output 'citlivost_oka.jpg' replot # nastaví terminál jpg # definuje jméno pro výstupní pole terminal post enh output 'citlivost_oka.eps' replot # nastaví terminál enhanced PostScript # definuje jméno pro výstupní pole terminal gif 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 logscale y2 terminal windows enhanced title "Spektralni citlivost oka" ylabel "relativni citlivost" y2label "log citlivosti" xlabel "{/Symbol=15 l} [nm]" y2range [1e-12:1] style data lines style line 1 lt 2 lc rgb "green" lw 3 style line 2 lt 1 lc rgb "red" lw 1 tics border nomirror
gnuplot data vytvořená jiným programen style data lines 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 {<rozsah>} {<opakování>} {<funkce> { <datové pole> {modifikátory datového pole}}} {axes {<osy>} {definování názvu} {with <styl>} {, {definice, } <funkce>...} 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 grid terminal windows 'Grupova rychlost' samples 100 terminal windows 'Grupova rychlost presneji' 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) xrange [x1 : x2] yrange [y1 : y2] autoscale z view h, v, z isosamples s1, s2 isosamples 100,100 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 isosamples 50,50 hidden3d splot [-4*pi :4*pi] [-4*pi :4*pi] \ sin(sqrt(x**2+y**2))/(sqrt(x**2+y**2)) contour base contour surface 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'; title "Bodova rozptylova funkce" off 0, 0 font "Ariel, 15" terminal windows enhanced 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 surface palette model RGB un surface palette model CMY positive un surface palette model RGB negative un surface grey scale palette gamma 3
gnuplot test barev test palette # příkaz poskytuje základní informace o barvách palette model XYZ test palette palette model RGB maxcolors 5 palette defined (0 'blue', 1 'green', 2 'yellow', 3 'red', 4 'dark-red') test palette...
gnuplot pm3d map, strmost 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: palette gamma 0.1 palette gamma 3 palette gamma0.5 palette gamma 5 palette gamma 1 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 a poslední příkaz plot (splot). Syntax: save {<co_se_uklada>} functions -funkce var -proměnné -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. 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); re - všechna dříve provedená nastavení pomocí příkazů 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]}} <funkce> '<datové pole>' {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>) <příkazy> [; 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 samples 100 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!