在 R 中根据时间序列数据制作 3D 曲面

发布于 2024-11-16 19:23:16 字数 306 浏览 1 评论 0原文

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

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

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

I have a large data set which I would like to make a 3D surface from. I would like the x-axis to be the date, the y-axis to be the time (24h) and the z-axis (height) to be a value I have ($). I am a beginner with R, so the simpler the better!

http://www.quantmod.com/examples/chartSeries3d/ has a nice example, but the code is way to complicated for my skill level!

Any help would be much appreciated - anything I have researched so far needs to have the data sorted, which is not suitable I think.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烂柯人 2024-11-23 19:23:16

存在几个选项: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() 需要数据作为 xy 网格位置以及矩阵 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() 不适用于类 < 的对象。 code>"Date" 此时(因此转换为数字)。

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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文