在R rgl中,如何选择plot3d中刻度线的位置?

时间:2018-04-26 21:29:13

标签: r rgl

在R中,

library(rgl)
m <- matrix(rnorm(300),100,3)
par3d(ignoreExtent=F)
plot3d(m,box=T,axes=F,xlab='',ylab='',zlab='')
axes3d(labels=F,tick=F,box=F)
gr <- grid3d('z')
par3d(ignoreExtent=T)
plot3d(cbind(m[,1:2],rgl.attrib(gr[1],'vertices')[1,3]),col='gray',add=T)

仍打印带有数字的刻度:

Box3D-1

tick=F中的axes3d()参数是否应该删除刻度线和数字?

我想在图表的底部添加x和y轴,而不是在顶部。此外,当我使用axis3d()添加它们时,刻度线不再正交,但相对于它们的平面倾斜45度,我认为这很难看。

par3d(ignoreExtent=F)
plot3d(m,box=T,axes=F,xlab='',ylab='',zlab='')
box3d()
axis3d('x--',labels=T,tick=T)
axis3d('y+-',labels=T,tick=T)
axis3d('z++',labels=T,tick=T)
gr <- grid3d('z')
par3d(ignoreExtent=T)
plot3d(cbind(m[,1:2],rgl.attrib(gr[1],'vertices')[1,3]),col='gray',add=T)

Box3D-2

如果我必须采取第二种方式,如何摆脱盒子的前线?或者是否有另一种方法可以在所需位置打印默认刻度线(正交)?

1 个答案:

答案 0 :(得分:1)

rgl中的轴有点令人困惑,而且不够灵活。首先,有两种不同的类型:axis3d绘制的那些,以及rgl.bbox绘制的那些。只有第一种类型注意tick参数,而您的第一个示例使用第二种类型。

您可以通过设置rgl.bbox来删除marklen = 0, marklen.rel = FALSE轴中的刻度线,但这样做会产生令人遗憾的效果,即将数字放在方框上。没有单独的参数来控制数字的位置,而与tickmark长度无关。如果您根本不需要数字,请使用xlen = 0, ylen = 0, zlen = 0

axis3d轴也不是很灵活。如果要更改其方向,则需要修改该功能。 mpos数组保存每个tick的坐标;改变它以使刻度指向您想要的方式。

关于方框:如果您使用box3d()来绘制它,则会修复此问题。如果您想要rgl.bbox样式,则必须使用该功能。您也可以使用segments3d()mtext3d()来构建自己的轴,但它们不会像rgl.bbox轴一样移动。