Several options present themselves, persp()
and wireframe()
, the latter in package lattice.
First some dummy data:
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()
needs the data as the x
and y
grid locations and a matrix z
of observations.
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))
and can be plotted using:
persp(new.dates, new.times, new.values, ticktype = "detailed", r = 10,
theta = 35, scale = FALSE)
The facets can be coloured using the col
argument. You could do a lot worse than study the code for chartSeries3d0()
at the page you linked to. Most of the code is just drawing proper axes as neither persp()
nor wireframe()
handle Date
objects easily.
As for wireframe()
, we
require(lattice)
wireframe(Value ~ as.numeric(Dates) + Times, data = dat, drape = TRUE)
You'll need to do a bit or work to sort out the axis labelling as wireframe()
doesn't work with objects of class "Date"
at the moment (hence the cast as numeric).