Gnuplot howto oldal - Trükkök
Amennyiben kérdésed van, hogyan lehet valamit megoldani, (valószínűleg!)
az oldal szerzője utánanéz és válaszol. Ha pedig valami itt nem szereplő trükkre rájöttél és nagyon büszke vagy rá, ne habozz közzétenni.
Linux (shell) parancsok kiadása
Írjunk felkiáltójelet a parancs elé:
gnuplot> !lsés máris ott az ls eredménye, meg egy felkiáltójel. Megjegyezzük, hogy ugyanez a módszer működik más programokban is, pl. az ftp-nél így lehet a helyi gépen kiadni parancsokat, ha pl. az lls nem működne.
gnuplot> shellmajd a végén, ha befejeztük: exit.
gnuplot> print `echo $((1+1))` 2 gnuplot> print 1+1 2sorok ugyanazt eredményezik. Sajnos, ha idézőjelbe tesszük a fordított aposztrofot, akkor a helyettesítő funkciója megszűnik:
gnuplot> print "`echo *`" `echo *`ahelyett, hogy az aktuális könyvtár tartalmát kiírná.
gnuplot> set zeroparanccsal írhatjuk át.
gnuplot> p [0:1] exp(-x-17)vidáman működik, de a
gnuplot> p [0:1] exp(-x-18) Warning: empty y range [5.6028e-09:1.523e-08], adjusting to [-1:1]hibát jelez. Ezt feloldhatjuk:
gnuplot> set zero 10**(-9) gnuplot> replotEkkor már látjuk az exponenciálist.
gnuplot> p [0:1] 1+exp(-x-15)Ekkor az y tengelyen csupa egyest látunk, bár a görbe szépen kirajzolódott. A kiírás pontosságát a set format segítségével módosíthatjuk, egészen úgy, mintha C környezetben tennénk:
gnuplot> set format y "%.10f" gnuplot> p [0:1] 1+exp(-x-15)és most már azt látjuk, amit szeretnénk.
gnuplot> test
gnuplot> reset; plot '-', '-' w l 1 1 2 3 3 5 e 1 1 2 4 # megjegyzés 3 9 e
gnuplot> reset
\n új sor \r bal felső csücsök jel \t N alatt L \123 oktális szám \\ \Ez utóbbihoz lásd a karakterkódokat a postscript mód leírásánál. A többi kód nem ad semmi érdekest. Felhívjuk a figyelmet, hogy egyszeres idézőjelben mindez nem működik, hanem megjelenik úgy, ahogy beírtuk. Enhanced postscript tegyük a sortörést kapcsos zárójelek közé!
set multiplot set size 0.5,1 plot [0:1] x #set lmargin 30 #set rmargin 20 set origin 0.5,0 set size 0.5,1 splot [0:1][0:1] x*y set nomultiplot
set xrange [0:1] set multiplot plot x notitle plot sin(x)**10 notitle set nomultiplotekkor a két görbe egyszerre lesz jelen, külön skálázva és egymásbalógó ytengelyek jelennek meg. Randa, kusza. Tegyük át a baloldalra a második görbe y tengelyét:
set xrange [0:1] set multiplot plot x notitle set noytics set y2tics plot sin(x)**10 notitle set nomultiplotAz a baj, hogy még mindig nincs egymáson a két grafikon. Toljuk egymásra! A set lmargin és set rmargin azt mondja meg, hogy hány karakterre legyen az ablak szélétől (befele mérve) a tengely. Ha nem adjuk meg, mindkét ábra magának számolja, természetesen különbözőképpen. Ha azonban kikötjük az elején, minden ábra utána ahhoz igazodik:
set rmargin 6 set lmargin 5 set xrange [0:1] set multiplot plot x notitle w l 1 set noytics set y2tics plot sin(x)**10 notitle w l 2 set nomultiplotMég mindig nem jó: A jobboldali y tengelyen rajtamaradtak a baloldali y tengely rovátkái. Ezt a set ytics beálltás nomirror kapcsolójával szedhetjük le. A végleges forma:
set rmargin 6 set lmargin 5 set xrange [0:1] set multiplot set ytics nomirror plot x notitle w l 1 set noytics set y2tics plot sin(x)**10 notitle w l 2 set nomultiplot
Adattartomány kiválasztása
x-től független fit intervallum megadása
Erre kettő megoldást tudok. Az egyik, hogy az every paranccsal
megadjuk, hogy mely sorokat akarjuk bevonni az illesztésbe:
gnuplot> fit 'file' every ::10::20 a+b*x+c*x*x via a,b,cpl. a 11-iktől a 21-ig sorig veszi figyelembe a file adatsorait. Ez pl. akkor hasznos, ha a sorszám szerint egyenletesen változó 1. oszlop valamely intervallumba tartozó értékeihez tartozó 2:3 pontpárokra akarunk illeszteni, vagy őket akarjuk ábrázolni. Pl. ha 0.1-esével megy az 1. oszlop nullától akkor a 10 és 20 közötti paraméterértékekhez tartozó görbepontok (pl. 2-es és 3-as oszlop) illesztése minden második pont kihajításával:
gnuplot> fit 'file' every 2::100::200 a+b*x via a,bA másik megoldás hack jellegű, íme:
Paramétertől függő fit intervallum megadása
A hack-megoldás, az, hogy először kiírjuk egy fileba a megfelelő
pontokat, majd, visszaolvasva értelmezzük. Legyen egy 'file' fileban
az 1. oszlop a paraméter, a 2. és a 3. oszlop pedig a görbe x és y pontjai.
Ha ezen paraméter 10 és 20 közötti értékénél akarunk illeszteni, írjuk
ezt (ilyenkor már kezd érdemes lenni scriptet írni):
set term table set output 'file1' splot [10:20] 'file_orig' 1:2:3 ! grep i file_1 > file_2 set term x11 set out fit 'file_2' u 2:3 a+b*x via a,bA set term table hatására a kimenet szöveges lesz, a set output-tal megadott file. (Set output hiányában a konzolra ír.) Ha most plot-ot használunk, akkor két oszlop kiiratására van lehetőség, ha splot-ot, akkor három. A jelen esetben 3 adatoszlop után egy betű is lesz minden sor végén a file1 fileban, ez o, ha a pont a tartományon kívül esik, és i, ha belül van, u pedig, ha nem definiált a pont. (A set table sok esetben jo, hiszen a using módosító segítségével oszlopon végrehajott műveleteket, vagy a set contour -ral létrehozott kontúrokat ilymódon menthetjük el.) A felkiáltójel külső programot hív, a grep kiválasztja az i-t tartalmazó sorokat, azaz azokat, akik az intervallumban vannak, őket egy új fileba írva a leszűkített adatfile előállt.
Borsányi Szabolcs fizikus