【问题标题】:R 3d surface plot with factor variables具有因子变量的 R 3d 曲面图
【发布时间】:2014-10-22 13:56:24
【问题描述】:

我有一个非常简单的问题,但就是想不通。如何为以下数据创建带有网格的 3D 曲面图。

x = c("Jan","Feb","Mar","Apr","May","Jun")
y = c("2010","2011","2012")
z = matrix(seq(1:18),nrow=3)

我已经尝试过这样的事情,但仍然无法得到我想要的。

persp3d(x, y, z)
plot3d(x, y, z)

谢谢。

【问题讨论】:

    标签: r plot rgl


    【解决方案1】:

    persp3d()x 是一个因子或字符变量时给出的错误意味着它只会在x 中使用数字(也可能在yz 中)所以x, y 必须是数字:

    x <- 1:6
    

    对应的月份名称:

    month <- c("Jan","Feb","Mar","Apr","May","Jun")
    

    我在这里撤回我之前的声明,现在我了解了 plot3d 如何将 z 值映射到由 xy 定义的位置,因此 y 可以保持原样,但必须是数字:

    y = c(2010,2011,2012)
    

    另外,nrow(z) 必须与nrow(x) 相同,这从尝试相反时抛出的错误再次清楚。所以:

    z = matrix(seq(1:18),nrow=6)
    

    在没有默认轴的情况下绘制曲面:(从这里开始,该方法与我们在 R 中使用普通 2d 图形进行自定义轴非常相似)

    library(rgl) persp3d(x, y, z, axes=F, ylab="", zlab="") box3d()

    最后添加你的坐标轴:

    axis3d(edge='x++', at=x, labels=month, tick=T) axis3d(edge='y--', at=y, labels=y, tick=T, pos=c(0,0,0), line=-1) axis3d(edge='z+-', at=as.integer(range(z)), labels=as.integer(range(z)), tick=T)

    【讨论】:

    • 这不是我所期望的。 1). "x" 显示为 "1,2,3,4,5,6",而不是 "Jan","Feb","Mar","Apr","May","Jun"。 2).它是散点图,而不是曲面图。谢谢。
    • 没错,我最初对plot3d 工作方式的假设是不正确的。查看更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2013-11-26
    • 2017-02-08
    • 2018-05-06
    • 2018-03-10
    • 2018-03-15
    相关资源
    最近更新 更多