在球面上绘制轮廓图

6
我已经获得了一些在固定距离R处的数据,并且针对各种theta(从垂直轴)和phi(从x轴)角度进行了采集,以便获得所需数量的三维表示。请注意,虽然phi跨越360度,但theta仅跨越70度至90度。
我知道如何使用plot3D包(即persp3D函数)生成3D图形或等高线图,但我想使用theta和phi角度信息在球体上绘制这些等高线。
您能否请指向适合在线资源,让我找到合适的解决方案?
非常感谢和祝好,
Nicola

3
给我们一些数据来玩吧! - Robert
@Robert,我应该包含一个共享的Dropbox文件还是在帖子中简单地写一些数据? - Nicola Pasquino
1个回答

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


Mark,谢谢你的回答。我会运行你的代码并看看会发生什么。然而,我在图片边缘看到了一些模糊的情况:这是方法本身固有的问题还是取样点数量的影响? - Nicola Pasquino
@NicolaPasquino - 在这种情况下,这只是由于数据的分布。更正确的方法是使用薄板样条插值。这是链接中提到的“快速而肮脏”的方法。 - Marc in the box

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接