В R rgl, как выбрать положение отметок в plot3d? - PullRequest
0 голосов
/ 27 апреля 2018

В Р,

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 голосов
/ 27 апреля 2018

Оси в rgl несколько запутаны и не очень гибки. Во-первых, есть два разных типа: те, которые нарисованы axis3d, и те, которые нарисованы rgl.bbox. Только первый тип обращает внимание на аргумент tick, а ваш первый пример использует второй тип.

Вы можете убрать отметки по осям rgl.bbox, установив marklen = 0, marklen.rel = FALSE, но это приводит к неудачному эффекту, когда числа ставятся прямо на поле. Нет отдельного параметра для управления размещением чисел независимо от длины отметки. Если вам вообще не нужны цифры, используйте xlen = 0, ylen = 0, zlen = 0.

Оси axis3d также не очень гибкие. Если вы хотите изменить их ориентацию, вам нужно изменить эту функцию. Массив mpos содержит координаты каждого тика; измените его, чтобы галочки указывали так, как вы хотите.

Относительно коробки: это исправлено, если вы используете box3d(), чтобы нарисовать его. Если вы хотите стиль rgl.bbox, вам придется использовать эту функцию. Вы также можете использовать segments3d() и mtext3d() для создания своих собственных осей, но они не будут двигаться как оси rgl.bbox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...