你能帮我在R中制作类似的情节吗?
我想让它具有交互性,以便我可以旋转球体。我想我应该使用rgl
。我找到了一个类似于我需要here的例子,但我找不到绘制网格而不是填充球体的方法。
UPD:可以帮助回答问题的可重现数据集(我从here获取):
u <- runif(1000,0,1)
v <- runif(1000,0,1)
theta <- 2 * pi * u
phi <- acos(2 * v - 1)
x <- sin(theta) * cos(phi)
y <- sin(theta) * sin(phi)
z <- cos(theta)
library("lattice")
cloud(z ~ x + y)
答案 0 :(得分:17)
从
开始mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
创建一个&#34;线框&#34;球体(我通过绘制两个球体在这里作弊一点,一个比另一个球体稍微大一点......可能有更好的方法来做到这一点,但我不能轻易/快速地计算它出)。
来自Wolfram web page on sphere point picking(图片来源)
同样地,我们可以选择u = cos(phi)来均匀分布(因此我们有du = sin phi dphi)并得到点
library("rgl") spheres3d(0,0,0,lit=FALSE,color="white") spheres3d(0,0,0,radius=1.01,lit=FALSE,color="black",front="lines")
;x = sqrt(1-u^2)*cos(theta)
;y = sqrt(1-u^2)*sin(theta)
,其中theta位于[0,2pi],u位于[-1,1],它们也均匀分布在S ^ 2上。
所以:
z=u
球体需要花费更多精力来渲染,但比set.seed(101)
n <- 50
theta <- runif(n,0,2*pi)
u <- runif(n,-1,1)
x <- sqrt(1-u^2)*cos(theta)
y <- sqrt(1-u^2)*sin(theta)
z <- u
spheres3d(x,y,z,col="red",radius=0.02)
(平面正方形)的结果更漂亮......
答案 1 :(得分:1)
我想逛逛最近的软件包sphereplot
,如果您真的很勇敢,可以建议使用gensphere
,以便在3空间中高度配置点。
sphereplot
包括一些简单的功能,例如(从手册页中引用)
pointsphere 随机球指向
说明随机生成数据
球体内均匀分布的点。
用法
点球(N = 100,longlim = c(0,360),latlim = c(-90,90),rlim = c(0,1))
参数 N个随机点数。
longlim经度的极限,以度为单位。
latlim纬度极限(度)。
rlim半径限制。