假设我们在球坐标系中有一个极坐标方程:
f(θ)= 1 + cos [2]
如果我们使用Mathematica制作3D图,我们可以这样做:
SphericalPlot3d[1+cos[2theta],{theta,0,pi},{phi,0,2pi}]
现在问题仍然存在:“我们怎样才能在R中做同样的事情?”
Mathematica的链接是:
https://reference.wolfram.com/language/ref/SphericalPlot3D.html
答案 0 :(得分:2)
包plot3D
允许您在R中创建3D绘图。它将x,y和z坐标作为输入,因此需要额外的步骤将球面坐标转换为笛卡尔坐标。要执行此步骤,我按如下方式定义函数:
spher2cart <- function(r, theta, phi) {
x <- r * sin(theta) * cos(phi)
y <- r * sin(theta) * sin(phi)
z <- r * cos(theta)
return(list(x = x, y = y, z = z))
}
下一步是为角度theta
和phi
定义一个值网格。 plot3D
提供了mesh()
功能,可以轻松完成此任务。
library(plot3D)
theta <- seq(0, pi, length = 50)
phi <- seq(0, 2*pi, length = 50)
M <- mesh(theta, phi)
names(M) <- c("theta", "phi")
然后,可以计算r
的值(对应于Mathematica&#39; s SphericalPlot3d
中的第一个参数):
r <- 1 + cos(2 * M$theta)
正如我已经提到的,我们需要用笛卡尔坐标表示:
cart <- spher2cart(r, M$theta, M$phi)
最后,创建了情节:
par(mar = c(0, 0, 0, 0))
surf3D(cart$x, cart$y, cart$z, border = "black",
colkey = FALSE, bty = "f",
phi = 20, theta = 30)
surf3D()
有很多选项,您可以使用?surf3D
了解它们。我使用的是:
border = "black"
:这会打开黑线网格。 colkey = FALSE
:关闭颜色图例bty = "f"
:绘制完整的方框。如果你不想要这个盒子,请忽略这一点。phi = 20
,theta = 30
:更改您查看情节的角度还有一个vignette for plot3d有很多例子。
修改强> 作为第二个例子,我展示了相同的情节,但有一些变化:
col = "grey"
(其他颜色也可以),表面颜色为灰色。xlab = "", ylab = "", zlab = ""
关闭轴标签。这导致以下代码和图:
surf3D(cart$x, cart$y, cart$z, border = "black",
colkey = FALSE, bty = "f",
phi = 20, theta = 30,
col = "grey",
xlab = "", ylab = "", zlab = "")