Car:: scatter3d в R - маркирующая ось лучше

Я использую scatter3d, а 3 оси имеют только два конечных значения. как я могу получить ярлыки по всей оси, как это делает обычная функция plot()?

Ответ 1

Хорошо. Я воспринял это как вызов.

Очевидно, вам нужно:

require(rgl)
require(car)
require(mgcv) # for the example

Скопируйте код car:::scatter3d.default и вставьте его обратно, присвоив его scatter3d.default.

Добавьте эти строки в начале кода для scatter3d.default:

 showLabels3d <- car:::showLabels3d  
 nice <- car:::nice  
  # since you will be losing their connection to the unexposed fns in car

Затем в блок кода, следующий за вторым if(axis.scales){ ...}, замените этот код:

 if (axis.scales) {
   x.labels <-  seq(lab.min.x, lab.max.x, 
                       by=diff(range(lab.min.x, lab.max.x))/4)
   x.at <- seq(min.x, max.x, by=nice(diff(range(min.x, max.x))/4))
      rgl.texts(x.at, -0.05, 0, x.labels, col = axis.col[1])

   z.labels <-  seq(lab.min.z, lab.max.z, 
                       by=diff(range(lab.min.z, lab.max.z))/4)
   z.at <- seq(min.z, max.z, by=diff(range(min.z, max.z))/4)
      rgl.texts(0, -0.1, z.at, z.labels, col = axis.col[3])

   y.labels <-  seq(lab.min.y, lab.max.y, 
                       by=diff(range(lab.min.y, lab.max.y))/4)
   y.at <- seq(min.y, max.y, by=diff(range(min.y, max.y))/4)
      rgl.texts(-0.05, y.at, -0.05, y.labels, col = axis.col[2])
                }

(Возможно, вам потребуется заменить код для scatter3d.formula, чтобы он не смотрел в car NAMESPACE для обычного метода scatter. Я просто заменил вызов scatter3d внутри car:::scatter3d.formula на "scatter3d.default", чтобы интерпретатор сначала посмотрел на вновь определенную функцию.)

Изменить: лучший способ, чем сбрасывать с помощью scatter3d.formula, - это присвоить пространству имен car новой функции с помощью этого кода:

environment(scatter3d.default) <- environment(car:::scatter3d.formula)

Затем, если вы это сделаете:

scatter3d(prestige ~ income + education, data=Duncan)

Вы получаете это (взятое с программой скриншота) enter image description here

Ответ 2

Существует новая опция, которая добавляет метки внутренней оси, с помощью scatter3d:

axis.ticks

если TRUE, печать внутренних осей - метки "tick"; по умолчанию FALSE. (Код для этой опции был предоставлен Дэвидом Уинсемием.)