我正在使用scatter3d,三个轴只有两个端点值。像正常的plot()函数一样,如何在整个轴上获取标签?

最佳答案

那好吧。我把它当作挑战。

显然,您需要:

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方法的scatter名称空间中查找。我只是将scatter3d内部的car:::scatter3d.formula调用替换为“ scatter3d.default ”,那么解释器将首先查看新定义的函数。)

编辑:比用scatter3d.formula废除更好的方法是使用以下代码将car命名空间/环境分配给新函数:

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


然后,如果您这样做:

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


您得到了此信息(通过屏幕截图程序拍摄)

08-24 15:50