• Ei tuloksia

Kuvien takaa

In document Survo ja minä (sivua 176-182)

Sanotaan, että "yksi kuva kertoo enemmän kuin tuhat sanaa". Rohkenen väit-tää, että Survo vuorostaan kertoo enemmän kuin tuhat kuvaa. Survoon kuuluu oma kuvakielensä, jonka perustana ovat pelkistetyt kuvatyypit. Kuvakieli sal-lii eri kuvatyyppien vapaan yhdistelyn, värityksen ja koristelun. Näin syntyvät hyvinkin monimutkaisilta näyttävät graafiset esitykset. Kun katsoo vain lopul-lista tulosta, moni pelkää, että tuon täytyy olla vaikeata. On syytä kuitenkin aina uskotella itselleen, ettei ole olemassakaan mitään monimutkaisia asioita.

Ne jotka sellaisilta näyttävät, ovat vain yksinkertaisten asioiden yhdistelmiä.

Taito on siinä, että kääntää asiat toisinpäin ja löytää ne yksinkertaiset osaset, joista haluttu kuva tulee koostumaan. Tämän taidon oppimisessa auttavat sekä valmiit mallit että kokeilemisen halu eli harhailu yrityksen ja erehdyksen mut-kaisella polulla.

Tämän kirjan aikaisemmissa luvuissa on esitetty kuvia Survon keinoin. Useat noista kuvista on tehty Survon GPLOT-komennolla kuvaruutuun. Ne on tosin siirretty tähän paperille vastaavanlaisista PLOT-kaavioista PostScript-kirjoit-timella. Kuvat viettävät Survossa eräänlaista kaksoiselämää. Tavallisesti ku-vaa suunniteltaessa kannattaa käyttää GPLOT-komentoa, sillä piirrokset tule-vat paljon nopeammin kuvaruutuun kuin paperille. Vasta lopullisemmassa muotoilussa otetaan PostScript käyttöön. Sitäkin voi jäljitellä kuvaruudussa ulkopuolisen Ghostscript-ohjelman avulla ja säästää kuluja erityisesti arvok-kailla väritulostimilla.

Nyt tulen käsittelemään ainoastaan PostScript-grafiikkaa. PostScript on yleinen sivunkuvauskieli ja olen luonut sille Survoon liittymän, joka sallii kaikki temput, mitä PostScript itse osaa. Liittämällä PLOT-kaavioon täsmen-nyksen DEVICE=PS Survo ymmärtää ottaa tuon liittymän käyttöön.

Vaikka monenlaisia kuvia onkin jo tehty, vielä ei ole kuitenkaan piirretty käyriä ja käyräparvia, joita tarvitaan varsinkin tutkimussovelluksissa. Otan nyt kor-kokäyristä esimerkin, joka valaisee sitä, miten kuva kehittyy lopulliseen muo-toonsa vaiheittain.

Y(X)=(1+P/100)^X

Kuvien takaa 175

Y(X) = (1 + P/100)X.

Arvolla P = 15 kuvaa on ensiksi yritetty piirtää (ruutu A) PLOT-kaaviolla

22 1 SURVO 84C EDITOR Sat Aug 24 17:48:29 1996 C:\KIRJA\ 100 100 0 22 1 SURVO 84C EDITOR Sat Aug 24 17:48:29 1996 C:\KIRJA\ 100 100 0 1 * 1 *

2 *P=15 SIZE=570,570 DEVICE=PS 2 *P=15 SIZE=570,570 DEVICE=PS 3 * 3 *PLOT Y(X)=(1+P/100)^XPLOT Y(X)=(1+P/100)^X 4 * 4 *

Aktivoidussa PLOT-komennossa kaava on ilmaistu sellaisenaan. Eksponentti on vain osoitettu merkin ^ avulla. Kuvan kooksi on määritelty 57 x 57 mm eli SIZE-täsmennyksessä yksikkönä on 0.1 mm. Koko on valittu niin, että kaksi tällaista kuvaa sopii sivulle vierekkäin.

Tulos on surkea. Koska muita tietoja ei ole annettu, Survo olettaa, että käyrä piirretään koordinaatistoon, jossa kumpikin kuva-alaan mahtuva akseli kulkee arvosta -10 arvoon 10. Tämä ikkuna on nyt liian suuri eli sitä pitää kaventaa antamalla sopivat XSCALE- ja YSCALE-täsmennykset. Samalla siirrytään yh-destä käyrästä käyräparveen, jossa korkokäyrät piirretään arvoilla P = 5,6, ..., 15. Lisäysten jälkeen kaavio on

22 1 SURVO 84C EDITOR Sat Aug 24 17:50:12 1996 C:\KIRJA\ 100 100 0 22 1 SURVO 84C EDITOR Sat Aug 24 17:50:12 1996 C:\KIRJA\ 100 100 0 1 * 1 *

2 *P=5,15,1 SIZE=570,570 DEVICE=PS 2 *P=5,15,1 SIZE=570,570 DEVICE=PS 3 * 3 *PLOT Y(X)=(1+P/100)^XPLOT Y(X)=(1+P/100)^X

4 *XSCALE=0(5)30 siis 0:sta 5:n välein 30:een 4 *XSCALE=0(5)30 siis 0:sta 5:n välein 30:een 5 *YSCALE=0(20)100 5 *YSCALE=0(20)100

6 * 6 *

ja se synnyttää kuvan B. Piirrokseen lisätään nyt ruudukko täsmennyksellä GRID=XY, jolloin kuva tulee muotoon C. Siitä huolimatta lukematarkkuus varsinkin alle 20 vuoden ajalta on tässä esityksessä kovin heikko. Ratkaisevaa on siirtyä Y-akselilla logaritmiseen asteikkoon muuttamalla YSCALE-täs-mennys muotoon

YYSCALE=*log(y),1,2,5,10,20,50,100SCALE=*log(y),1,2,5,10,20,50,100,

jolloin saadaan kuva D. Eksponentiaalinen kasvu taittuu näin lineaariseksi ja luettavuus paranee olennaisesti. Seuraavaksi kohennetaan piirroksen tekstejä täsmennyksin

HHEADER=Korkokäyrät_P=5;6;...;15% YLABEL=EADER=Korkokäyrät_P=5;6;...;15% YLABEL=

eli alkuperäinen otsikko (käyrän yhtälö) korvataan sisältöä kuvaavalla. Samal-la poistetaan logaritmista asteikkoa osoittava merkintä Y-akselin päästä pane-malla YLABEL tyhjäksi (kuva E).

Lopulta kaaviota somistetaan vielä harmaalla reunuksella maalaamalla ensin koko kuva-alue harmaaksi ja palauttamalla sitten varsinainen piirrosalue val-koiseksi. Tämä tapahtuu FRAMES-täsmennyksillä ja lopullinen kuva F on siis tullut PLOT-kaaviosta

22 1 SURVO 84C EDITOR Sat Aug 24 17:52:56 1996 C:\KIRJA\ 100 100 0 22 1 SURVO 84C EDITOR Sat Aug 24 17:52:56 1996 C:\KIRJA\ 100 100 0 1 * 1 *

2 *P=5,15,1 SIZE=570,570 DEVICE=PS 2 *P=5,15,1 SIZE=570,570 DEVICE=PS 3 * 3 *PLOT Y(X)=(1+P/100)^XPLOT Y(X)=(1+P/100)^X

4 *XSCALE=0(5)30 4 *XSCALE=0(5)30

5 *YSCALE=*log(y),1,2,5,10,20,50,100 5 *YSCALE=*log(y),1,2,5,10,20,50,100 6 *GRID=XY XDIV=120,400,50 YDIV=100,350,120 6 *GRID=XY XDIV=120,400,50 YDIV=100,350,120 7 *HEADER=Korkokäyrät_P=5;6;...;15% YLABEL= 7 *HEADER=Korkokäyrät_P=5;6;...;15% YLABEL=

8 *FRAMES=F1,F2 F1=0,0,570,570,2 F2=120,100,400,350,0 8 *FRAMES=F1,F2 F1=0,0,570,570,2 F2=120,100,400,350,0 9 * 9 *

FRAMES-täsmennyksellä nimetään kaksi suorakaidetta F1 ja F2. Kumpikin määritellään omalla opasteellaan antamalla vasemman alakulman koordinaatit, leveys, korkeus ja harmauden aste, jolloin 0 tarkoittaa valkoista. Kuvissa C -F on lisäksi käytetty XDIV- ja YDIV-täsmennyksiä (rivi 6). Ne määrittelevät tarkasti, miten koko kuva-ala jakautuu suhteellisesti reuna-alueisiin ja itse piirrosalueeseen. Yksityiskohtaista tietoa löytyy Survosta aloittamalla kysely-sanalla PLOT?.

Lopullisesta kuvasta mm. selviää, että pääoman kaksinkertaistumiseen kuluu 5%:n korolla noin 15 vuotta, mutta 15%:n kiskurikorolla vain 5 vuotta.

Olympiarenkaat

Survo ei kilpaile "vapaan käden" piirrosohjelmien kanssa, koska esim. käyrien piirtoa ohjataan yhtälöillä tai Survon havaintoaineistojen avulla. Jouko Man-ninen on tosin rakentanut taidokkaasti Survon päälle omia hiirellä ohjattavia graafisia toimintoja. Survon kuvakieli järjestelmällisyydessään johtaa usein vaativissa tehtävissä helpommin hallittaviin ja muunneltaviin ratkaisuihin kuin mihin tavanomaiset piirrosohjelmat yltävät.

Varmasti moni piirtää olympiarenkaat omalla mieliohjelmallaan helpommin kuin miten ne nyt sommitellaan. Survon edut tulevat näkyville vasta mutkik-kaammissa tilanteissa, joista kerron tämän jälkeen. Teen nyt olympiarenkaat vain näyttääkseni pienoiskoossa, miten Survossa toimitaan.

Ensin täytyy osata piirtää ympyröitä. Tämän vuoksi näytän piirroskaavion, jo-ka tuottaa Kolmogorovin paradoksin yhteydessä esitetyn, viiden toisiaan si-vuavan ympyrän yhdistelmän.

Kuvien takaa 177 39 1 SURVO 84C EDITOR Sun Aug 25 10:04:38 1996 C:\KIRJA\ 100 100 0 39 1 SURVO 84C EDITOR Sun Aug 25 10:04:38 1996 C:\KIRJA\ 100 100 0 1 * 1 *

2 * 2 *PLOT X(T)=X0+R*cos(T),Y(T)=Y0+R*sin(T)PLOT X(T)=X0+R*cos(T),Y(T)=Y0+R*sin(T) 3 * 3 *

4 *DATA YMPYRÄT 4 *DATA YMPYRÄT 5 *X0 Y0 R 5 *X0 Y0 R

6 * 0 0 0.41421 sqrt(2)-1=0.4142135623731 6 * 0 0 0.41421 sqrt(2)-1=0.4142135623731 7 * 1 1 1 7 * 1 1 1

8 *-1 1 1 8 *-1 1 1 9 *-1 -1 1 9 *-1 -1 1 10 * 1 -1 1 10 * 1 -1 1 11 * 11 *

12 *DEVICE=PS 12 *DEVICE=PS

13 *X0=DATA:YMPYRÄT,X0 Y0=DATA:YMPYRÄT,Y0 R=DATA:YMPYRÄT,R 13 *X0=DATA:YMPYRÄT,X0 Y0=DATA:YMPYRÄT,Y0 R=DATA:YMPYRÄT,R 14 *T=0,2*pi,pi/40 pi=3.1416 14 *T=0,2*pi,pi/40 pi=3.1416

15 *SCALE=-2,0,2 SIZE=700,700 DEVICE=PS,YMP5.PS 15 *SCALE=-2,0,2 SIZE=700,700 DEVICE=PS,YMP5.PS 16 * 16 *

Ympyrät kannattaa piirtää aina parametriesityksessä x(t) = x0+ r cos(t),

y(t) = y0+ r sin(t),

missä r on säde, (x0,y0) keskipiste ja t vaihekulma, joka kulkiessaan välin [0,2π] piirtää koko ympyränkaaren.

Kaaviossa ko. parametriesitys ilmoitetaan sellaisenaan itse PLOT-komennon yhteydessä. Parametrit x0, y0 ja r, jotka vaihtelevat, on annettu havaintotau-lukkona YMPYRÄT (rivit 4-10) ja ne sidotaan käyrän parametreihin rivin 13 täsmennyksillä. Jokainen havainto tuottaa oman ympyränsä. Rivillä 14 määrä-tään vaihekulma t kulkemaan väli [0,2π] askelin π/40 eli itse asiassa Survo piirtää tässä ympyröiden asemasta säännöllisiä 80-kulmioita. Saa olla tarkka-näköinen, että ne ympyrästä erottaa. Näin syntyy piirros

X(T)=X0+R*cos(T), Y(T)=Y0+R*sin(T)

-2 0 2

-2 0 2

Täsmennyksillä HEADER= ja FRAME=0 saataisiin kaikki turhat apuviivat ja tekstit pyyhityksi niin, että pelkät ympyrät vain jäävät. Siirryn nyt kuitenkin suoraan olympiarengaskaavioon. Se on äskeisen välitön yleistys.

45 1 SURVO 84C EDITOR Sun Aug 25 10:28:47 1996 C:\KIRJA\ 100 100 0 45 1 SURVO 84C EDITOR Sun Aug 25 10:28:47 1996 C:\KIRJA\ 100 100 0 18 * 18 *

19 *Olympiarenkaat 19 *Olympiarenkaat 20 *DATA OLYMPIA 20 *DATA OLYMPIA

21 * A B C D E Selitys 21 * A B C D E Selitys

22 * -2 0 4 1 0 Sininen A: Keskipisteen X-koord. 22 * -2 0 4 1 0 Sininen A: Keskipisteen X-koord.

23 * 0 0 9 1 0 Musta B: Keskipisteen Y-koord. 23 * 0 0 9 1 0 Musta B: Keskipisteen Y-koord.

24 * 2 0 5 1 0 Punainen C: Väri 24 * 2 0 5 1 0 Punainen C: Väri

25 * -1 -1 1 1 0 Keltainen D: Kaarenpituus 25 * -1 -1 1 1 0 Keltainen D: Kaarenpituus 26 * 1 -1 3 1 0 Vihreä E: Kaaren lähtökulma 26 * 1 -1 3 1 0 Vihreä E: Kaaren lähtökulma 27 * -2 0 4 0.1 -0.2 Sininen yli keltaisen (paikkaus) 27 * -2 0 4 0.1 -0.2 Sininen yli keltaisen (paikkaus)

28 * 0 0 9 0.1 4.1 Musta yli keltaisen (paikkaus) 28 * 0 0 9 0.1 4.1 Musta yli keltaisen (paikkaus) 29 * 0 0 9 0.1 -0.2 Musta yli vihreän (paikkaus) 29 * 0 0 9 0.1 -0.2 Musta yli vihreän (paikkaus) 30 * 2 0 5 0.1 4.1 Punainen yli vihreän (paikkaus) 30 * 2 0 5 0.1 4.1 Punainen yli vihreän (paikkaus) 31 * 31 *

32 * 32 *PLOT X(T)=A+R*COS(D*T+E),Y(T)=B+R*SIN(D*T+E)PLOT X(T)=A+R*COS(D*T+E),Y(T)=B+R*SIN(D*T+E) 33 *DEVICE=PS 33 *DEVICE=PS

34 *R=0.90 34 *R=0.90

35 *T=[line_width(5)],0,2*pi,pi/20 pi=3.1416 35 *T=[line_width(5)],0,2*pi,pi/20 pi=3.1416

36 *A=DATA:OLYMPIA,A B=DATA:OLYMPIA,B D=DATA:OLYMPIA,D E=DATA:OLYMPIA,E 36 *A=DATA:OLYMPIA,A B=DATA:OLYMPIA,B D=DATA:OLYMPIA,D E=DATA:OLYMPIA,E 37 *XSCALE=-3,3 YSCALE=-2,1 SIZE=1160,580 37 *XSCALE=-3,3 YSCALE=-2,1 SIZE=1160,580

38 *COLOR_CHANGE=C C=DATA:OLYMPIA,C FRAME=0 XDIV=0,1,0 YDIV=0,1,0 HEADER= 38 *COLOR_CHANGE=C C=DATA:OLYMPIA,C FRAME=0 XDIV=0,1,0 YDIV=0,1,0 HEADER=

39 * 39 *

Kaavio pitää huolta siitä, että kyseessä ovat todelliset renkaat, joiden paksuus ilmaistaan [line_width(5)]-ohjauksella (rivi 35) ja jotka todella linkittyvät oi-kein. Tämä hoidetaan pienillä ympyränkaaren paikkauksilla (viimeiset havainnot). Esim. laitimmainen vasemmalla kulkee viereisen ylitse ja alitse.

Täsmennys COLOR_CHANGE pitää huolta värin muutoksista. Tässä värien asemasta on käytetty harmaan eri asteita. Värikuvassa värit määriteltäisiin negatiivisin indeksein esim. niin, että täsmennyksellä [FILL−1]=0,0,1,0 arvo -1 C-sarakkeessa tarkoittaisi puhdasta keltaista. Survossa on PostScript-kielen mukaisesti käytössä CMYK-väritysjärjestelmä eli värikomponentteja on 4 (Cyan, Magenta, Yellow, Black). Ne voivat vaihdella jatkuvasti nollasta ykköseen, jolloin hyvillä laitteilla väriyhdistelmiä syntyy erittäin paljon.

Kuvien takaa 179 Muistan, että Simo Puntanen aikoinaan ehdotti mahdollisuutta antaa havainto-tiedoston arvojen vaikuttaa käyrien parametrihin. Hän tarvitsi tätä ominaisuut-ta tilastollisissa piirroksissa eri otoksisominaisuut-ta laskettujen tunnuslukujen vaihtelun graafiseen esittämiseen. Olen hyvin kiitollinen hänen ideastaan, sillä se on ri-kastuttanut Survon kuvakieltä monissa muissakin yhteyksissä.

In document Survo ja minä (sivua 176-182)