R ::标记轴上的car :: scatter3d更好

Cod*_*Guy 10 r scatter-plot rgl

我正在使用scatter3d,3轴只有两个端点值.如何在整个轴上获得标签,就像普通的plot()函数一样?

42-*_*42- 28

那好吧.我认为这是一个挑战.

显然你需要:

require(rgl)
require(car)
require(mgcv) # for the example
Run Code Online (Sandbox Code Playgroud)

复制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
Run Code Online (Sandbox Code Playgroud)

然后在第二个代码块之后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])
                }
Run Code Online (Sandbox Code Playgroud)

(您可能需要替换代码,scatter3d.formula以便不会在carNAMESPACE中查找常规调度的scatter方法.我只是用"scatter3d.default" 替换scatter3d内部调用car:::scatter3d.formula,因此解释器将首先查看新定义的函数.)

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

environment(scatter3d.default) <- environment(car:::scatter3d.formula)
Run Code Online (Sandbox Code Playgroud)

然后,如果你这样做:

scatter3d(prestige ~ income + education, data=Duncan)
Run Code Online (Sandbox Code Playgroud)

你得到这个(用截图程序拍摄) 在此输入图像描述

  • 希望能够为你付出的努力量增加+更多. (10认同)