2015-07-27 21 views
6

Ho acquisito alcuni dati a una distanza fissa R e per vari angoli theta (dall'asse verticale) e phi (dall'asse x) in modo da ottenere una rappresentazione 3D della quantità di interesse. Si prega di notare che mentre il phi si estende a 360 °, theta si estende solo da 70 ° a 90 °.Profili di contorno su una superficie a sfera

So come generare un grafico 3D con il pacchetto plot3D (vale a dire, la funzione persp3D) o un grafico di contorno, ma mi piacerebbe disegnare tali contorni su una sfera usando le informazioni theta e phi angle.

Vorrei indicarmi la risorsa online appropriata dove posso trovare una soluzione adeguata?

Molte grazie e cordiali saluti

Nicola

+3

Dateci alcuni dati per giocare con !! – Robert

+0

@Robert, dovrei includere un file dropbox condiviso o devo semplicemente scrivere alcuni dati nel post? –

risposta

2

Questo non è esattamente una rappresentazione 3D (ad esempio in rgl), ma forse è una buona partenza:

library(maps) 
library(mapproj)   
library(akima) 

set.seed(11) 
n <- 500 
x <- runif(n, min=-180,max=180) 
y <- runif(n, min=-90,max=90) 
z <- x^2+y^3 

PARAM <- NULL 
PROJ <- "orthographic" 
ORIENT <- c(45,15,0) 
XLIM <- c(-180, 180) 
YLIM <- c(-90, 90) 

nlevels=20 
pal <- colorRampPalette(
    c("purple4", "blue", "cyan", "yellow", "red", "pink")) 
map("world", col=NA, param=PARAM, proj=PROJ, orient=ORIENT, xlim=XLIM, ylim=YLIM) 
P <- mapproject(x,y) 
incl <- which(!is.na(P$x)) 
Field <- interp(P$x[incl],P$y[incl],z[incl], 
    xo=seq(min(P$x[incl]), max(P$x[incl]), length = 100), 
    yo=seq(min(P$y[incl]), max(P$y[incl]), length = 100) 
) 
image(Field, add=TRUE, col=pal(nlevels)) 
points(P$x, P$y, pch=".", cex=2, col=4) 
Cont <- contour(Field, add=TRUE, n=nlevels, col="white") 
lines(sin(seq(0,2*pi,,100)), cos(seq(0,2*pi,,100)), lwd=3) 

enter image description here

+0

Mark, grazie per la risposta. Eseguirò il tuo codice e vedrò cosa succede. Tuttavia, vedo un po 'di scarsa risoluzione nel bordo dell'immagine: è intrinseco al metodo o dipenderà dal numero di punti campione? –

+0

@NicolaPasquino - In questo caso, è solo a causa della distribuzione dei dati. Un metodo più corretto sarebbe utilizzare un'interpolazione di spline a lastra sottile (http://menugget.blogspot.de/2012/03/xyz-geographic-data-interpolation-part.html). Questo era il metodo "rapido e sporco" menzionato nel link. –

Problemi correlati