car :: scatter3d в R - лучше пометить ось - PullRequest
10 голосов
/ 21 ноября 2011

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

Ответы [ 2 ]

28 голосов
/ 21 ноября 2011

Ну хорошо. Я принял это как вызов.

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

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

0 голосов
/ 24 февраля 2017

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

axis.ticks

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

...