3D-kuvaajat Gnuplotilla

Deltawikistä
Versio hetkellä 22. tammikuuta 2016 kello 16.00 – tehnyt Wh delta (keskustelu | muokkaukset) (5 revisions)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioon Siirry hakuun

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]