Ero sivun ”3D-kuvaajat Gnuplotilla” versioiden välillä
Ei muokkausyhteenvetoa |
p (5 revisions) |
||
(4 välissä olevaa versiota samalta käyttäjältä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
Kolmiulotteisten funktioiden kuvaamiseen Gnuplotilla on monta eri tapaa. Menetelmä riippuu tietenkin siitä, mitä haluaa kuvaajallaan esittää. 3D-kuvaajat eroavat siinä mielessä kaksiulotteisista, että niiden piirtämiseen käytetään <tt>splot</tt>-komentoa. | Kolmiulotteisten funktioiden kuvaamiseen Gnuplotilla on monta eri tapaa. Menetelmä riippuu tietenkin siitä, mitä haluaa kuvaajallaan esittää. 3D-kuvaajat eroavat siinä mielessä kaksiulotteisista, että niiden piirtämiseen käytetään <tt>splot</tt>-komentoa. | ||
[[Kuva:Sol1.png|thumb|right|350px|3D-kuvaaja isosamplesin ja rangejen demonstrointiin.]] | |||
==Pisteet 3D-avaruudessa== | ==Pisteet 3D-avaruudessa== | ||
Ensin määritellään piirrettävä funktio | Ensin määritellään piirrettävä funktio <tt>f(x,t)</tt>. Huomaa, että nyt voit käyttää mitä vain muuttujia yhtälön määrittämiseen. Esimerkkifunktiossamme muuttujia ovat <tt>x</tt> ja <tt>t</tt> sekä määrättävänä vakiona <tt>v</tt>. Allaoleva palauttaa virheen, jos <tt>v</tt>:tä ei ole määritelty. Lopuksi plotataan käyttäen <tt>splot</tt>-komentoa. Huomaa, että nyt argumenteiksi ei anneta samoja, kuin ennen, vaan plotattavat akselit <tt>x</tt> ja <tt>y</tt>. | ||
<pre> | <pre> | ||
f(x,t) = (v/2.0)/(cosh(sqrt(v)/2*(x - v*t - 5))**2) | f(x,t) = (v/2.0)/(cosh(sqrt(v)/2.0*(x - v*t - 5.0))**2.0) | ||
v = 5.0 | |||
splot f(x,y) | splot f(x,y) | ||
</pre> | </pre> | ||
Nyt saadaan kuvaaja, joka ei kuitenkaan vielä näytä hääppöiseltä. Gnuplot asettaa oletuksena x- ja y-akselit -10:stä 10:een sekä näytteenottotaajuuden 10x10:ksi. Näitä voimme säätää tutuilla [[Kuvaajan_asetuksia | kuvaajan asetuksilla]] sekä <tt>isosamples</tt>-asetuksella. | |||
Komennoilla: | |||
<pre> | |||
set xrange[-2:6] | |||
set yrange[0:1] | |||
set isosamples 30:30 | |||
f(x,t) = (v/2.0)/(cosh(sqrt(v)/2.0*(x - v*t - 5.0))**2.0) | |||
v = 5.0 | |||
splot f(x,y) | |||
</pre> | |||
Saammekin jo pätevän näköisen kuvaajan ja voimme ehkä jopa havaita mitä siinä tapahtuu. | |||
[[Kuva:Sol3.png|thumb|right|350px|3D-kuvaaja surfin ja hidden3d:n demonstrointiin.]] | |||
==Piirtäminen datatiedostosta== | |||
Edellä kuvaaja piirrettiin määritetystä [[Laskeminen ja funktiot Gnuplotissa|funktiosta]], mutta usein tulee vastaan tilanne, jossa kuvaaja pitää piirtää datatiedostosta. | |||
Rajat säädetään kuten edellä. Esimerkkitapauksessa ne on säädetty hyvin spesifistisesti rajaamaan datatiedostosta vain halutut asiat näkyville. Komento <tt>set view</tt> määrää kuvakulman. | |||
<pre> | |||
set surf | |||
set hidden3d | |||
set xrange[0.82:2.94] | |||
set yrange[4:14.9] | |||
set zrange[-0.1:8] | |||
set view 40,70 | |||
splot 'zabuskykruskal-2008-3-23-12.33.44.data' w lines | |||
</pre> | |||
[[Kuva:Sol4.png|thumb|right|350px|3D-kuvaaja everyn]] | |||
Jos käyttämämme datatiedosto on suuri ja yritämme pyörittää siitä piirrettyä kuvaa saadaksemme paremman kuvakulman huomaamme, että se on melkoisen raskasta. Tätä voi parannella muutamalla eri tavalla. Optio <tt>every x:y</tt> lisättynä <tt>splot</tt>-riville, ottaa huomioon datapisteistä vain x- ja y- suunnissa toivotun määrän. Esim | |||
<pre> | |||
set surf | |||
set hidden3d | |||
set xrange[0.82:2.94] | |||
set yrange[4:14.9] | |||
set zrange[-0.1:8] | |||
set view 40,70 | |||
splot 'zabuskykruskal-2008-3-23-12.33.44.data' every 5:5 w lines | |||
</pre> | |||
[[Kuva:Sol2.png|thumb|right|350px|2D-värikartta 3D-datasta]] | |||
==2D kartta 3D datasta== | |||
3D-kuvaajat ovat usein näyttävän näköisiä ja käytettäessä terminaalia <tt>wxt</tt> tai <tt>x11</tt> (ehkä Windowsillakin) voidaan kuvaajaa jopa pyörittää ja katsella eri kulmista. Kuitenkin lähes aina 3D-kuvaajissa jotain jää jonkin muun taakse. | |||
Ratkaisuna tähän on piirtää 3D-datasta kaksiulotteinen kartta, jossa kolmatta ulottuvuutta ilmentää väri. Tämä tehdään <tt>pm3d</tt>-moodilla ja <tt>map</tt>-asetuksella. Rajat asetetaan kuten aikaisemminkin. <tt>zrange</tt>-asetuksen sijaan käytämme nyt <tt>cbrange</tt>-asetusta. sen jälkeen plottaaminen normaalisti ja saamme oheisen näköisen kuvan. | |||
<pre> | |||
set pm3d map | |||
set xrange[0.82:2.94] | |||
set yrange[4:14.9] | |||
set cbrange[-0.1:8] | |||
splot 'zabuskykruskal-2008-3-23-12.33.44.data' | |||
</pre> | |||
Huomaa, että tämä moodi tarvitsee datatiedoston muotoa | |||
<pre> | |||
x_0 y_01 z_01 | |||
... | |||
x_0 y_0n z_0n | |||
x_1 y_10 z_01 | |||
... | |||
</pre> | |||
Eli "skannausten" välissä pitää olla tyhjä rivi. Jos datatiedostossa ei näin ole, niin seuraava awk-skirpti muokkaa datan oikean muotoiseksi. | |||
<tt>addblanks.awk</tt> | |||
<pre> | |||
/^[[:blank:]]*#/ {next} # ignore comments (lines starting with #) | |||
NF < 3 {next} # ignore lines which don't have at least 3 columns | |||
$1 != prev {printf "\n"; prev=$1} # print blank line | |||
{print} # print the line | |||
</pre> | |||
Tämän voi ajaa joko komentoriviltä | |||
<pre> | |||
$ awk -f addblanks.awk datatiedosto.txt > kohde.txt | |||
</pre> | |||
tai Gnuplotissa itsessään | |||
<pre> | |||
splot '<awk -f addblanks.awk datatiedosto.txt' using... | |||
</pre> | |||
==Lisää?== | |||
[[Luokka:Gnuplot]] |
Nykyinen versio 22. tammikuuta 2016 kello 16.00
Kolmiulotteisten funktioiden kuvaamiseen Gnuplotilla on monta eri tapaa. Menetelmä riippuu tietenkin siitä, mitä haluaa kuvaajallaan esittää. 3D-kuvaajat eroavat siinä mielessä kaksiulotteisista, että niiden piirtämiseen käytetään splot-komentoa.
Pisteet 3D-avaruudessa[muokkaa]
Ensin määritellään piirrettävä funktio f(x,t). Huomaa, että nyt voit käyttää mitä vain muuttujia yhtälön määrittämiseen. Esimerkkifunktiossamme muuttujia ovat x ja t sekä määrättävänä vakiona v. Allaoleva palauttaa virheen, jos v:tä ei ole määritelty. Lopuksi plotataan käyttäen splot-komentoa. Huomaa, että nyt argumenteiksi ei anneta samoja, kuin ennen, vaan plotattavat akselit x ja y.
f(x,t) = (v/2.0)/(cosh(sqrt(v)/2.0*(x - v*t - 5.0))**2.0) v = 5.0 splot f(x,y)
Nyt saadaan kuvaaja, joka ei kuitenkaan vielä näytä hääppöiseltä. Gnuplot asettaa oletuksena x- ja y-akselit -10:stä 10:een sekä näytteenottotaajuuden 10x10:ksi. Näitä voimme säätää tutuilla kuvaajan asetuksilla sekä isosamples-asetuksella.
Komennoilla:
set xrange[-2:6] set yrange[0:1] set isosamples 30:30 f(x,t) = (v/2.0)/(cosh(sqrt(v)/2.0*(x - v*t - 5.0))**2.0) v = 5.0 splot f(x,y)
Saammekin jo pätevän näköisen kuvaajan ja voimme ehkä jopa havaita mitä siinä tapahtuu.
Piirtäminen datatiedostosta[muokkaa]
Edellä kuvaaja piirrettiin määritetystä funktiosta, mutta usein tulee vastaan tilanne, jossa kuvaaja pitää piirtää datatiedostosta.
Rajat säädetään kuten edellä. Esimerkkitapauksessa ne on säädetty hyvin spesifistisesti rajaamaan datatiedostosta vain halutut asiat näkyville. Komento set view määrää kuvakulman.
set surf set hidden3d set xrange[0.82:2.94] set yrange[4:14.9] set zrange[-0.1:8] set view 40,70 splot 'zabuskykruskal-2008-3-23-12.33.44.data' w lines
Jos käyttämämme datatiedosto on suuri ja yritämme pyörittää siitä piirrettyä kuvaa saadaksemme paremman kuvakulman huomaamme, että se on melkoisen raskasta. Tätä voi parannella muutamalla eri tavalla. Optio every x:y lisättynä splot-riville, ottaa huomioon datapisteistä vain x- ja y- suunnissa toivotun määrän. Esim
set surf set hidden3d set xrange[0.82:2.94] set yrange[4:14.9] set zrange[-0.1:8] set view 40,70 splot 'zabuskykruskal-2008-3-23-12.33.44.data' every 5:5 w lines
2D kartta 3D datasta[muokkaa]
3D-kuvaajat ovat usein näyttävän näköisiä ja käytettäessä terminaalia wxt tai x11 (ehkä Windowsillakin) voidaan kuvaajaa jopa pyörittää ja katsella eri kulmista. Kuitenkin lähes aina 3D-kuvaajissa jotain jää jonkin muun taakse.
Ratkaisuna tähän on piirtää 3D-datasta kaksiulotteinen kartta, jossa kolmatta ulottuvuutta ilmentää väri. Tämä tehdään pm3d-moodilla ja map-asetuksella. Rajat asetetaan kuten aikaisemminkin. zrange-asetuksen sijaan käytämme nyt cbrange-asetusta. sen jälkeen plottaaminen normaalisti ja saamme oheisen näköisen kuvan.
set pm3d map set xrange[0.82:2.94] set yrange[4:14.9] set cbrange[-0.1:8] splot 'zabuskykruskal-2008-3-23-12.33.44.data'
Huomaa, että tämä moodi tarvitsee datatiedoston muotoa
x_0 y_01 z_01 ... x_0 y_0n z_0n x_1 y_10 z_01 ...
Eli "skannausten" välissä pitää olla tyhjä rivi. Jos datatiedostossa ei näin ole, niin seuraava awk-skirpti muokkaa datan oikean muotoiseksi.
addblanks.awk
/^[[:blank:]]*#/ {next} # ignore comments (lines starting with #) NF < 3 {next} # ignore lines which don't have at least 3 columns $1 != prev {printf "\n"; prev=$1} # print blank line {print} # print the line
Tämän voi ajaa joko komentoriviltä
$ awk -f addblanks.awk datatiedosto.txt > kohde.txt
tai Gnuplotissa itsessään
splot '<awk -f addblanks.awk datatiedosto.txt' using...