我有一个大型数据集,我想从中制作 3D 表面。我希望 x 轴是日期,y 轴是时间(24 小时),z 轴(高度)是我拥有的值($)。我是 R 的初学者,所以越简单越好!
http://www.quantmod.com/examples/chartSeries3d/有一个很好的例子,但代码对于我的技能水平来说太复杂了!
任何帮助将不胜感激 - 到目前为止我研究过的任何东西都需要对数据进行排序,我认为这不合适。
我有一个大型数据集,我想从中制作 3D 表面。我希望 x 轴是日期,y 轴是时间(24 小时),z 轴(高度)是我拥有的值($)。我是 R 的初学者,所以越简单越好!
http://www.quantmod.com/examples/chartSeries3d/有一个很好的例子,但代码对于我的技能水平来说太复杂了!
任何帮助将不胜感激 - 到目前为止我研究过的任何东西都需要对数据进行排序,我认为这不合适。
有几个选项出现,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
观察矩阵。y
z
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"
(因此强制转换为数字)。