如何在 rgl R 中自动移动轴标签
How to move axis labels automatically in rgl R
首先感谢任何花时间阅读我糟糕的英语并帮助我解决问题的人(这是我的第一个问题post)。
在 rgl 中,bbox 函数写入的轴会自动移动,以免遮挡数据。但是轴标签不会移动。据我所知,title3d() 和 mtext3d() 只能在固定位置写入轴标签。我通过将 axis tick labs 更改为 axis labs 来强行实现它。但是图形很乱,该方法不能处理很长的实验室。有没有办法让实验室自动移动??
这是我的强制方法的示例代码:
library(rgl)
x <- rnorm(10, 3, 1); y <- rnorm(10, 4, 1); z <- rnorm(10, 2, 1)
open3d()
plot3d(x, y, z, type="s", col="red", radius=0.05, xlab="XX", ylab="YY", zlab="ZZ", box=F)
# Axes move automatically, but labels don't.
# My forcibly method's code
my.labaxes <- function(xlab, ylab, zlab, box = T) {
my.xat <- pretty(par3d("bbox")[1:2])[ 2 : (length(pretty(par3d("bbox")[1:2]))-1) ]
my.yat <- pretty(par3d("bbox")[3:4])[ 2 : (length(pretty(par3d("bbox")[3:4]))-1) ]
my.zat <- pretty(par3d("bbox")[5:6])[ 2 : (length(pretty(par3d("bbox")[5:6]))-1) ]
my.xlab <- my.xat
my.ylab <- my.yat
my.zlab <- my.zat
my.xlab[round( length(my.xat) / 2 + 0.1)] <- xlab
my.ylab[round( length(my.yat) / 2 + 0.1)] <- ylab
my.zlab[round( length(my.zat) / 2 + 0.1)] <- zlab
if(box) axes3d("bbox", xat = my.xat, yat = my.yat, zat = my.zat,
xlab = my.xlab, ylab = my.ylab, zlab = my.zlab, box = T)
else axes3d("bbox", xat = my.xat, yat = my.yat, zat = my.zat,
xlab = my.xlab, ylab = my.ylab, zlab = my.zlab, box = F)
}
open3d()
plot3d(x, y, z, type="s", col="red", radius=0.05, xlab="", ylab="", zlab="", axes=F)
my.labaxes(xlab="XX", ylab="YY", zlab="ZZ", box=F)
不,那不可能。只有绘图的刻度线和背景会移动。您需要修改 src/BBoxDeco.cpp 中的代码以添加对移动标签的支持,然后对调用它的 R 代码进行大量修改。这真的不容易。
首先感谢任何花时间阅读我糟糕的英语并帮助我解决问题的人(这是我的第一个问题post)。
在 rgl 中,bbox 函数写入的轴会自动移动,以免遮挡数据。但是轴标签不会移动。据我所知,title3d() 和 mtext3d() 只能在固定位置写入轴标签。我通过将 axis tick labs 更改为 axis labs 来强行实现它。但是图形很乱,该方法不能处理很长的实验室。有没有办法让实验室自动移动??
这是我的强制方法的示例代码:
library(rgl)
x <- rnorm(10, 3, 1); y <- rnorm(10, 4, 1); z <- rnorm(10, 2, 1)
open3d()
plot3d(x, y, z, type="s", col="red", radius=0.05, xlab="XX", ylab="YY", zlab="ZZ", box=F)
# Axes move automatically, but labels don't.
# My forcibly method's code
my.labaxes <- function(xlab, ylab, zlab, box = T) {
my.xat <- pretty(par3d("bbox")[1:2])[ 2 : (length(pretty(par3d("bbox")[1:2]))-1) ]
my.yat <- pretty(par3d("bbox")[3:4])[ 2 : (length(pretty(par3d("bbox")[3:4]))-1) ]
my.zat <- pretty(par3d("bbox")[5:6])[ 2 : (length(pretty(par3d("bbox")[5:6]))-1) ]
my.xlab <- my.xat
my.ylab <- my.yat
my.zlab <- my.zat
my.xlab[round( length(my.xat) / 2 + 0.1)] <- xlab
my.ylab[round( length(my.yat) / 2 + 0.1)] <- ylab
my.zlab[round( length(my.zat) / 2 + 0.1)] <- zlab
if(box) axes3d("bbox", xat = my.xat, yat = my.yat, zat = my.zat,
xlab = my.xlab, ylab = my.ylab, zlab = my.zlab, box = T)
else axes3d("bbox", xat = my.xat, yat = my.yat, zat = my.zat,
xlab = my.xlab, ylab = my.ylab, zlab = my.zlab, box = F)
}
open3d()
plot3d(x, y, z, type="s", col="red", radius=0.05, xlab="", ylab="", zlab="", axes=F)
my.labaxes(xlab="XX", ylab="YY", zlab="ZZ", box=F)
不,那不可能。只有绘图的刻度线和背景会移动。您需要修改 src/BBoxDeco.cpp 中的代码以添加对移动标签的支持,然后对调用它的 R 代码进行大量修改。这真的不容易。