我使用
rgl
包绘制 3D 绘图,并且我想使用对数转换的 z
轴。我所做的是:
# Dummy data.
x <- seq(1, 2, length = 10); y <- seq(1, 3, length = 10)
z <- outer(x, y, function(x, y) x + exp(y)); z <- log(z)
# Plot.
rgl::persp3d(x, y, z, col= "white")
rgl::surface3d(x, y, z, front = "lines")
3d 对象看起来如我所料。但我希望 z 标签不要显示对数值,而是希望它显示原始值,即
3
所在的位置应该有 20
(因为 exp(3)
约为 20
)。所以我正在寻找一些相当于ggplot2::scale_y_continuous(trans= "log10")
的东西,如这里所讨论的。如何使用 rgl
包做到这一点?
rgl
对此没有提供太多支持。 基本思想是告诉 persp3d()
跳过轴,然后使用 box3d()
和 axis3d()
等调用将它们绘制到您想要的位置。 例如,
library(rgl)
x <- seq(1, 2, length = 10); y <- seq(1, 3, length = 10)
z <- outer(x, y, function(x, y) x + exp(y)); z <- log10(z)
# Plot.
open3d()
persp3d(x, y, z, col= "white", polygon_offset = 1, axes = FALSE)
surface3d(x, y, z, front = "lines")
box3d()
axis3d("x")
axis3d("y")
zticks <- pretty(z)
zlabels <- signif(10^zticks, 2)
axis3d("z", at = zticks, labels = zlabels)
这不会产生“浮动”轴;他们可能可以使用
mtext3d()
和其他功能,但工作量很大。