Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
car::R轴上的scatter3d-更好地标记轴_R_Scatter Plot_Rgl - Fatal编程技术网

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

car::R轴上的scatter3d-更好地标记轴,r,scatter-plot,rgl,R,Scatter Plot,Rgl,我使用的是scatter3d,三个轴只有两个端点值。如何像普通plot()函数一样在整个轴上获得标签?哦,好吧。我把它当作一种挑战 显然,你需要: require(rgl) require(car) require(mgcv) # for the example 复制car:::scatter3d.default代码并将其粘贴回,将其分配给scatter3d.default 将这些行添加到scatter3d的早期代码中。默认值为: showLabels3d <- car:::showL

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

哦,好吧。我把它当作一种挑战

显然,你需要:

require(rgl)
require(car)
require(mgcv) # for the example
复制
car:::scatter3d.default
代码并将其粘贴回,将其分配给
scatter3d.default

将这些行添加到scatter3d的早期代码中。默认值为:

 showLabels3d <- car:::showLabels3d  
 nice <- car:::nice  
  # since you will be losing their connection to the unexposed fns in car
(您可能需要替换
scatter3d.formula
的代码,这样就不会在
car
命名空间中查找常规调度的
scatter3d
方法。我只是将
scatter3d
调用
car:::scatter3d.formula
替换为“scatter3d.default”因此,解释器将首先查看新定义的函数。)

编辑:比使用scatter3d更好的方法。公式是将
car
命名空间/环境分配给具有以下代码的新函数:

 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])
                }
environment(scatter3d.default) <- environment(car:::scatter3d.formula)
你得到这个(用截图程序拍摄)

在scatter3d的帮助下,有一个添加内部轴标签的新选项:

十字轴

如果为真,则打印内部轴-“勾选”标签;默认值为FALSE。(此选项的代码由David Winsemius提供。)


“我希望能够为您在这里付出的努力+更多”。@本·博克:您可能知道我在解决这个问题的过程中犯了多少错误。回答得很好,但我在运行它时遇到了一些麻烦。scatter3d是否与scatterplot3d相同?我想您在尝试绘图之前还需要运行“数据(Duncan)”。不,
scatter3d
在pkg:car中,
scatterplot3d
在pkg:scatterplot3d中。我不需要运行数据(Duncan),但如果不运行require(car)(或library(car)),则可能需要这样做。pkg:car中的RGL版本允许您以交互方式控制轴的旋转和打印,并且平面点和轴标签一起移动<代码>散点图3D生成静态图形。你不能以交互方式移动它,而且据我所知,它也没有公式界面。注意:您可以使用
rgl.snapshot
生成
rgl
绘图窗口的图像。这似乎非常有用,但我在执行时遇到了问题。如果我键入car:::scatter.default,它将返回:get中的错误(name,envir=asNamespace(pkg),inherits=FALSE):未找到对象“scatter.default”,但car:::scatter3d.default将返回整个函数。是否编辑scatter3d.default?当我将if(axis.scales)代码添加到scatter3d.default时,我得到一个错误,即:在match.arg(id.method)中出错:找不到对象“id.method”?你有我可以使用的完整版本的代码编辑吗?谢谢@梅根:那是我的错误:现在修正如下。(没有看到这个,因为它不在我的答案下,也不是写给我的。)回复:完整代码。我可以,但那样的话,答案会有点笨重。我不确定其他观众对“庞大”的答案有何感受。请注意,完整版本的代码(还有一两处调整)现在链接到
scatter3d(prestige ~ income + education, data=Duncan)