【问题标题】:Contour plots on a sphere surface球面上的等高线图
【发布时间】:2015-10-17 15:05:46
【问题描述】:

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

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

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

非常感谢和亲切的问候

尼古拉

【问题讨论】:

  • 给我们一些数据来玩!!
  • @Robert,我应该包含一个共享的保管箱文件还是应该简单地在帖子中写一些数据?

标签: r contour


【解决方案1】:

这并不完全是 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)

【讨论】:

  • 马克,谢谢你的回答。我会运行你的代码,看看会发生什么。但是,我看到图片边框的分辨率有点低:它是该方法固有的还是取决于采样点的数量?
  • @NicolaPasquino - 在这种情况下,这只是由于数据的分布。更正确的方法是使用thin plate spline interpolation。这是链接中提到的“快速而肮脏”的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多