R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

Karttapallo

Paul Murrell on julkaissut alunperin vuonna 2005 painetusta kirjastaan R Graphics uuden päivitetyn ja laajennetun version.

Aiempikin versio oli kultakaivos, mutta tästä opin jälleen uusia temppuja, nimittäin interaktiivista grafiikkaa käyttäen toteutetun karttapallon. Siinä pallon pinnan tekstuurina käytetään erillistä png-muotoista kuvatiedostoa. Toteutus menee pääpiirteissään seuraavasti.

library(rworldmap)
library(rgl)
 
# Luodaan tekstuurina käytettävä maailmankartta
png("worldsmall.png", width=2000, height=1000)
par(mar=c(0,0,0,0))
plot(getMap(resolution="medium"), lwd=1, col="#009900", bg="#00CCFF44")
dev.off()
 
# Muodostetaan pallo, ja päällystetään se tekstuurilla
lat <- matrix(seq(90,-90, len=200)*pi/180, 200, 200, byrow=TRUE)
long <- matrix(seq(-180, 180, len=200)*pi/180, 200, 200)     
r <- 6378.1 # radius of Earth in km
x <- r*cos(lat)*cos(long)
y <- r*cos(lat)*sin(long)
z <- r*sin(lat)
 
# Plotataan pallo rgl-paketin funktioita käyttäen
open3d(windowRect=c(100, 100, 300, 300))
clear3d("all")
light3d()
persp3d(x, y, z, col="white", 
        texture="worldsmall.png", 
        specular="black", axes=FALSE, box=FALSE, xlab="", ylab="", zlab="",
        normal_x=x, normal_y=y, normal_z=z)
par3d(userMatrix=rotationMatrix(-pi/2, 1, 0, 0)%*%
      rotationMatrix(-30/180*pi, 0, 0, 1)%*%
      rotationMatrix(45/180*pi, 1, 0, 0),
      zoom=2/3)

Tuloksena on siis interaktiivinen grafiikka, jota voi pyöritellä ja lähentää ja loitontaa. Tulos näyttää ruutukaappauksena seuraavalta:

One Response to “Karttapallo”


Category