【问题标题】:R 3D plot axis tick labelsR 3D绘图轴刻度标签
【发布时间】:2012-01-21 21:10:29
【问题描述】:

我正在使用图 6.15 here 中的方法在 R 中绘制 3D 直方图。

我设置了 scale = list(arrow=F),因此每个轴上都有刻度线而不是箭头。

情节看起来不错,但我想更改轴刻度标签。我的 x 轴从 1-26 开始,我的 y 从 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轴,而且不只是对角线被填满,而是显示轴的问题。

【问题讨论】:

  • 请添加一个可重现的示例。您链接到的页面包含多个图,包括 lattice 和 ggplot2。避免歧义并添加示例数据集。
  • 我注意到链接页面上是图6.15。

标签: r graphics 3d cloud lattice


【解决方案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。所以它只需要一个向量。

【讨论】:

  • 来自 cloud(lattice) 的文档:Scales: a list describing the scales. As with other high level functions ... It can also contain components with the special names x, y and z, which can be **similar lists** with axis-specific values overriding the ones specified in scales. 如果我给它一个长数字向量,那么它使用相同的位置在所有 3 个轴上进行标记。一个向量没有指示一个轴在哪里结束而另一个轴在哪里开始。如果我这样做:at = c(1:26,1:26,4*10^-6,4*10^-6) 例如,它可以工作,但是我在 x 和 y 轴上得到了太多的刻度,而在 Z 上却没有。
  • 'at' 参数在不同的上下文中有不同的用法。请参阅下面的示例。
【解决方案2】:

这些结果需要进一步的工作,但它确实满足您的要求,并向您展示了将参数作为列表传递给 'scales' 的含义:

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 的范围根本不是你提供的那些小值,所以你需要接受这个现实。如果你想重新标记比例,那么我已经向你展示了如何做到这一点。

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多