2015-07-27 71 views
6

Bazı verileri sabit bir mesafede R ve çeşitli teta (dikey eksenden) ve phi (x ekseni) açıları için elde ettim, böylece ilgilenilen miktarın 3B temsili elde edildi. Lütfen unutmayın ki phi 360 ° iken, theta sadece 70 ° ila 90 ° arasındadır.Küre yüzeyindeki kontur çizimleri

Plot3D paketiyle (persp3D işlevi) veya kontur çizimiyle 3B çizimin nasıl oluşturulduğunu biliyorum, ancak teta ve phi açıları bilgisini kullanarak bir küre üzerinde bu gibi konturları çizmek istiyorum.

Lütfen bana uygun bir çözümü bulabileceğim uygun çevrimiçi kaynağa yönlendirir misiniz?

Çok teşekkürler ve saygılarımızla

Nicola

+3

Oynamak için bazı veriler verin !! – Robert

+0

@Robert, paylaşılan bir dropbox dosyası içermeli mi yoksa basitçe yazıya veri yazmalı mıyım? –

cevap

2

Bu tam bir 3d gösterimi (örn içinde rgl) değil, ama belki bir başlangıç ​​sunar:

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, cevabın için teşekkürler. Kodunu çalıştırıp ne olacağını göreceğim. Bununla birlikte, resmin sınırında bir miktar zayıf karar görüyorum: yönteme içsel mi yoksa örnek puanların sayısına mı bağlı olacak? –

+0

@NicolaPasquino - Bu durumda, sadece verilerin dağıtımından kaynaklanıyor. Daha doğru bir yöntem [ince plaka spline enterpolasyonu] kullanmaktır (http://menugget.blogspot.de/2012/03/xyz-geographic-data-interpolation-part.html). Bu bağlantıda belirtilen "hızlı ve kirli" yöntemdi. –

İlgili konular