2015-07-27 2 views
6

Я приобрел некоторые данные на фиксированном расстоянии R и для разных точек tta (по вертикальной оси) и phi (по оси x), чтобы получить трехмерное представление интересующей величины. Обратите внимание, что в то время как phi охватывает 360 °, тета охватывает только от 70 ° до 90 °.Контурные графики на поверхности сферы

Я знаю, как создать 3D-график с пакетом plot3D (а именно, функцию persp3D) или контурный график, но я хотел бы нарисовать такие контуры над сферой, используя информацию о тетах и ​​phi-углах.

Не могли бы вы указать мне подходящий онлайн-ресурс, где я могу найти подходящее решение?

Большое спасибо и добрые пожелания

Nicola

+3

Дайте нам некоторые данные, чтобы играть! – Robert

+0

@Robert, должен ли я включать общий файл Dropbox или должен ли я просто писать некоторые данные в сообщении? –

ответ

2

Это не совсем 3d представление (например, в rgl), но, возможно, это поможет вам начать работу:

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

Марк, спасибо за ваш ответ. Я запустил ваш код и посмотрю, что произойдет. Тем не менее, я вижу немного плохое разрешение на границе изображения: является ли это неотъемлемой частью метода или будет зависеть от количества точек выборки? –

+0

@NicolaPasquino - В этом случае это связано только с распределением данных. Более правильным методом будет использование [тонкопленочной сплайновой интерполяции] (http://menugget.blogspot.de/2012/03/xyz-geographic-data-interpolation-part.html). Это был «быстрый и грязный» метод, упомянутый в ссылке. –

Смежные вопросы