Ero sivun ”3D-kuvaajat Gnuplotilla” versioiden välillä

Deltawikistä
Siirry navigaatioon Siirry hakuun
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.

Tiedosto:Sol1.png
3D-kuvaaja isosamplesin ja rangejen demonstrointiin.

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.

Tiedosto:Sol3.png
3D-kuvaaja surfin ja hidden3d:n demonstrointiin.

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


Tiedosto:Sol4.png
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 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


Tiedosto:Sol2.png
2D-värikartta 3D-datasta

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...

Lisää?[muokkaa]