我正在使用 scatter3d 并且 3 个轴只有两个端点值。我怎样才能在整个轴上获得标签,就像普通的 plot() 函数一样?
问问题
4353 次
2 回答
28
那好吧。我把它当作一个挑战。
显然你需要:
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)
你得到了这个(用截图程序拍摄)
于 2011-11-21T01:24:53.350 回答
0
有一个新选项可以在以下帮助下添加内轴标签scatter3d
:
轴刻度
如果为真,则打印内轴-“tick”标签;默认为假。(此选项的代码由 David Winsemius 提供。)
于 2017-02-24T04:13:57.540 回答