球体表面上的轮廓图

时间:2015-07-27 12:19:46

标签: r contour

我已经获得了固定距离R和各种θ(来自垂直轴)和phi(来自x轴)角度的一些数据,以获得感兴趣量的3D表示。请注意,虽然phi跨度为360°,但θ仅跨越70°到90°。

我知道如何使用plot3D包(即persp3D函数)或等高线图生成3D绘图,但我想使用theta和phi角度信息在球体上绘制这样的轮廓。

请您指出适当的在线资源,我可以找到合适的解决方案吗?

非常感谢和亲切的问候

尼古拉

1 个答案:

答案 0 :(得分: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