我正在使用图6.15 here中的方法在R中绘制3D直方图。
我设置了scale = list(箭头= F),因此我在每个轴上都有刻度线而不是箭头。
情节看起来很好,但我想更改轴刻度标签。我的x轴从1-26开始,我的从1-24开始,我的Z从0-8E-6开始。理想情况下,我希望在每个离散的x和y值上都有一个标签,然后在z轴上的某个合理间隔。
我尝试使用缩放选项'tick.number',但它似乎只取一个数字,或者使用列表中的第一个,所以如果我将它设置为26,我会在y轴上得到多余的刻度线,z轴看起来像垃圾。
我看到尺度上有'at'和'labels'选项,就像2D情节一样,但我似乎无法让它工作。文档表明它应该是每个面板的位置和标签的向量列表,所以我尝试了:
at = list(c(1:26), c(1:24), c(2*10^-6, 4*10^-6, 8*10^-6))
但它抱怨道:
(list) object cannot be coerces to type 'double'
我认为如果我弄清楚如何使用'at'那么'label'应该变得清晰。
编辑:
以下是示例代码:
library(latticeExtra)
Cg = 1:25
Cr = 1:25
freqs = rnorm(25, .5, .1)
cloud(freqs~Cg*Cr, xlim=c(27,-1), ylim=c(25,-1), panel.3d.cloud=panel.3dbars, par.settings=list(box.3d = list(col="transparent")), col.facet="grey", scales=list(arrows=F))
我的数据具有不同长度的X和Y轴,而不仅仅是对角线被填充,但它显示了轴问题。
答案 0 :(得分:1)
来自cloud
(lattice
)的文档:
'at'给出了向量 颜色变化的切点
所以它需要是一个向量,而不是向量列表。您获得的错误是由于无法将矢量列表转换为数字:
at = list(c(1:26), c(1:24), c(2*10^-6, 4*10^-6, 8*10^-6))
> as.numeric(at)
Error: (list) object cannot be coerced to type 'double'
at
参数描述颜色的变化位置,类似于levelplot
。所以它只需要一个向量。
答案 1 :(得分:1)
这些结果需要进一步的工作,但它确实满足了您的要求,并向您展示将参数传递给' scale'作为清单:
cloud(freqs~Cg*Cr, xlim=c(27,-1), ylim=c(25,-1),zlim=c(0,1), # needed to add zlim
panel.3d.cloud=panel.3dbars, par.settings=list(box.3d = list(col="transparent")),
col.facet="grey",
scales=list(arrows=F, x=list(at = c(1:26), lab=c(1:26)) ,
y=list(at= c(1:24), lab=c(1:24)),
z= list(rot=20, # to prevent over-riding the tick marks
at= c(.2,.4,.8) , # data spans larger range
lab=c("2*10^-6 ", "4*10^-6 ", "8*10^-6 ") )
) )
z的范围根本不是你提供的那些小值,所以你需要接受这个现实。如果你想重新标记比例,那么我已经向你展示了如何做到这一点。