2

我有一个大型数据集,我想从中制作 3D 表面。我希望 x 轴是日期,y 轴是时间(24 小时),z 轴(高度)是我拥有的值($)。我是 R 的初学者,所以越简单越好!

http://www.quantmod.com/examples/chartSeries3d/有一个很好的例子,但代码对于我的技能水平来说太复杂了!

任何帮助将不胜感激 - 到目前为止我研究过的任何东西都需要对数据进行排序,我认为这不合适。

4

1 回答 1

7

有几个选项出现,persp()并且wireframe(),后者在包lattice中。

首先是一些虚拟数据:

set.seed(3)
dat <- data.frame(Dates = rep(seq(Sys.Date(), Sys.Date() + 9, by = 1), 
                              each = 24),
                  Times = rep(0:23, times = 10),
                  Value = rep(c(0:12,11:1), times = 10) + rnorm(240))

persp()需要数据作为网格位置和x观察矩阵。yz

new.dates <- with(dat, sort(unique(Dates)))
new.times <- with(dat, sort(unique(Times)))
new.values <- with(dat, matrix(Value, nrow = 10, ncol = 24, byrow = TRUE))

并且可以使用以下方法绘制:

persp(new.dates, new.times, new.values, ticktype = "detailed", r = 10, 
      theta = 35, scale = FALSE)

可以使用参数对构面进行着色col。你可以做的比chartSeries3d0()在你链接到的页面上研究代码更糟糕。大多数代码只是绘制正确的轴,因为既persp()不能轻松wireframe()处理Date对象也不能轻松处理对象。

至于wireframe(),我们

require(lattice)
wireframe(Value ~ as.numeric(Dates) + Times, data = dat, drape = TRUE)

您需要做一些工作来整理轴标签,因为wireframe()目前不适用于类对象"Date"(因此强制转换为数字)。

于 2011-06-22T08:28:48.973 回答