gnuplot
nástroj pro kreslení grafů
Katedra optiky, Přírodovědecká fakultaUniverzita Palackého v Olomouci
gnuplot – nástroj pro kreslení grafů a analýzu
● Smyslem výpočtů je porozumění, ne čísla.
● 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“
● Čísla a grafy pomáhají porozumět
cena
Dow Jonesův index
čas
cena
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 WilliamsColin KelleyRussell LangDave KotzJohn CambellGershon Elbera mnoho jinýchHans-Bernhard BrokerEthan A Merritta mnoho jiných
● Svobodný software● České návody a příklady:
V. Jarý (2004): na Linuxsoft.czP. Pinkas (2001): na Root.czP. 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ě, domaa 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ěca 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 funkceStandardní znaky:
+ pro součet- pro rozdíl* pro násobení/ pro dělení** pro mocninu! faktoriál
abs, sign (absolutní hodnota, znaménko)ceil, floor („zaokrouhlení nahoru a dolů“)sin, cos, tanasin, acos, atansinh, cosh, tanhasinh, acosh, atanhexplog (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í funkce:
== rovnost!= nerovnost< menší<= menší nebo rovno> větší>= větší nebo rovno&& logické AND (a)|| logické OR (nebo)! negace
Standardní logické operátory:
Funkce, které požadují, nebo vrací úhly, jsoupřednastaveny na radiány. Přepnutí na stupně příkazem set angles degreesZpětné přepnutí na radiány příkazem set angles radians.
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/51
print 6.0/51.2
print 7*sin(pi/6)3.5
print ceil(2.0/5)1
print floor(2.0/5)0
print {2.0,3.0}*{4.0,5.0}{-7.0, 22.0}
print pi, exp(1), sqrt(-1)3.14159265358979 2.71828182845905 {0.0, 1.0}
a=3; b=-5; c=2D=b**2-4*a*cx1=(-b+sqrt(D))/(2*a) ; x2=(-b-sqrt(D))/(2*a)print D, x1, x2
1 1.0 0.666666666666667
a=4D=b**2-4*a*cx1=(-b+sqrt(D))/(2*a) ; x2=(-b-sqrt(D))/(2*a)print D, x1, x2
-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
plot [0:4*pi] [-1.2: 1.5] sin(x), sin(x+2*pi/3), sin(x+4*pi/3)
set zeroaxis linetype -1 linewidth 2.5 #nastaví černou barvu os a jejich šířku
gnuplot – definice uživatelských funkcí set titel 'Bodova rozptylova funkce psf(x)' psf(x)=(2*besj1(x)/x)**2
plot psf(x)
I=[ 2 J 1 ]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.
plot [-5 : 5] [-2.5 : 2.5] f(x)
f(x)=(x>2) ? 2: ((x<-2)?-2:x)
gnuplot – více os, popis os
set xrange [0 : 5] set yrange [0 : 60] set y2range [-150 : 0] set xlabel "doba [s]" set ylabel "rychlost [m/s]" set y2label "hloubka [m]" set tics border nomirror
plot 9.81*x title 'v=gt' axes x1y1, -0.5*9.81*x**2 title 'h=1/2 gt^2' axes x1y2
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
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=12f(t)=r*t – d*sin(t)g(t)=r – d*cos(t)plot [0:20] f(t), g(t)
gnuplot – polární souřadnicePoloho bodu P v rovině lze určit polárními souřadnicemi r, θ .
x = r sin θy = r cos θ
set polar #zapne režim polárního zadávání souřadnic
r
θθx
yP
unset border #odstraní orámování grafu set xtics axis nomirror #popis x se nebude zdvojovatset ytics axis nomirror #popis y se nebude zdvojovatset samples 160 #zvýší počet děleni na 160set zeroaxis #vykreslí osy v bodě 0set trange [0:2*pi] #nastaví rozsah θ (tj. t)set title "Kruhy" #napíše nadpis grafu
plot 1.0,2,3
Vykresluje se funkce r=f(θ)Přednastavení rozsahu změny θ je 0 až 2π
Příklad:
gnuplot – graf ze souboru datMějme datový soubor citlivost_oka.dat, jehož struktura odpovídá tabulce:
400 0.0004 0.0093410 0.0012 0.0348420 0.004 0.0966..... ..... .......... ..... .....700 0.0041 0710 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 1set 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 -1 je vždy plná černá čára,lt 1 je obvykle plná červená čára,lt 2 je obvykle plná zelená řára, lt 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 #vypíše dostupné terminály
● Linux
X11
wxt -samostatná oknadxf –pole pro AutoCadgif –obrazový GIFjpeg –JPEG obrazový formátlatex –obrázky v LaTEXpng -PNG obrazový výstuppostscript -včetně *.epssvg -vektorový fotmát..................................................................
● Windows
windowswindows enhanced
dxf –pole pro AutoCadgif –obrazový GIFjpeg –JPEG obrazový formátlatex –obrázky v LaTEXpng -PNG obrazový výstup postscript -včetně *.epssvg -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 # nastaví terminál pngset output 'citlivost_oka.png' # definuje jméno pro výstupní polereplot
set terminal jpg # nastaví terminál jpgset output 'citlivost_oka.jpg' # definuje jméno pro výstupní polereplot
set terminal post enh # nastaví terminál enhanced PostScriptset output 'citlivost_oka.eps' # definuje jméno pro výstupní polereplot
set terminal gif # nastaví terminál gifset output 'citlivost_oka.gif' # definuje jméno pro výstupní polereplot
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éhografické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
set terminal windows enhancedset title "Spektralni citlivost oka"
set ylabel "relativni citlivost"set y2label "log citlivosti"set xlabel "{/Symbol=15 l} [nm]" set y2range [1e-12:1]
set style data linesset 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
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
gnuplot – data vytvořená jiným programen
set style data linesset 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
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))
lambda1=0.5; lambda2=0.6; c=2.99793e16; n1=1.5; n2=1.51f1=c/lambda1; f2=c/lambda2; v1=c/n1; v2=c/n2
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: plot sin(x)př2: plot [-2*pi : 2*pi] sin(x)př3: plot sin(x), cos(x)př4: plot f(x)=sin(x*a), a=0.2, f(x), a=0.4, f(x)př5: plot „soubor_dat.1“ with lines, „soubor_dat.2“ with pointspř6: plot [t=0:90] [-100:100] tan(pi*t/180) př7: plot [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
plot [0:10] [-2.1: 2.2] sin(2*pi*f1*(0-x/v1)) + sin(2*pi*f2*(0-x/v2))
set terminal windows 'Grupova rychlost' set samples 100
lambda1=0.5; lambda2=0.6; c=2.99793e16; n1=1.5; n2=1.51f1=c/lambda1; f2=c/lambda2; v1=c/n1; v2=c/n2set grid
set terminal windows 'Grupova rychlost – presneji'set samples 1000
gnuplot – 3D grafy, příkaz splot
splot [x1:x2] [y1:y2] [z1:z2] f(x,y) #nastaví meze a vykreslí plochu
set xrange [x1 : x2] #globální nastavení rozsahu osy xset yrange [y1 : y2] #globální nastavení rozsahu osy yset autoscale z # automatické nastavování meyí osy zset view h, v, z # nastaví úhel pohledu (h=60, v=30, z=1 vzdálenost)set isosamples s1, s2 #nastavení dělení (vzorků) na ose x a y
set isosamples 100,100set hidden3d
splot [0 : 2*pi] [0 : 4*pi] sin(x)*sin(y)
gnuplot – ekvipotenciální čáry
set contour base set contour surface set contour both
set isosamples 50,50set hidden3d
splot [-4*pi :4*pi] [-4*pi :4*pi] \ sin(sqrt(x**2+y**2))/(sqrt(x**2+y**2))
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 pm3d at stset palette grayset palette gamma 3set gridset key bmarginset border 4095set surfaceset samples 100set isosamples 61set ticslevel 0
gnuplot – mnoho možností a účelunset surfaceset palette model RGB negative
set surfaceset palette model RGB
unset surfaceset palette model CMY positive
unset surfaceset grey scaleset 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 5set 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 poaplikaci tohoto nastavení pro různá gamma následované příkazem replot grafy:
set palette gamma 5 set palette gamma 3 set palette gamma 10
set palette gamma 0.1 set palette gamma0.5 set palette gamma 1
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 {<co_se_uklada>} '<jmeno_pole>'
functions -funkcevar -proměnnéset -nastavení,term -terminálnení-li nic, ukládá se vše
zvolený názevv uvozovkáchnapř.'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šenaa 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>, ...}
if (<podmínka>) <příkazy> [; else if (<podmínka>) ...; else ...]
gnuplot – podmíněný příkaz if, smyčka
if - podmíněný příkaz „jestliže“
p=0 load 'smycka10.dat'
Spojení reread s if umožní animaci:
#definice souboru smycka10.datp=p+0.05plot [0:8*pi] sin(x-p)pause 0.05if (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 100set 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.05replotpause 0.1if (p>-10) reread
gnuplot
Zkuste to!