如何从带有日期和时间值的表中创建3D图?

时间:2018-07-16 22:36:24

标签: r plot 3d

我是R的新手,并尝试从服务器机架中直观地获取一年收集的温度数据。数据已经按照以下格式准备并加载到R环境中的data对象中:

> str(data)
'data.frame':   516496 obs. of  5 variables:
 $ Day         : POSIXct, format: "2017-06-29" "2017-06-29" "2017-06-29" "2017-06-29" ...
 $ SecondsOfDay: int  0 60 120 180 240 300 360 420 480 540 ...
 $ Temp        : num  34.8 34.7 34.7 34.7 34.7 ...

字段Day仅包含日期,字段SecondsOfDay是一天中的第二天,四舍五入为整分钟。字段Temp包含实际温度值。

我想创建此数据的3D图,其中X轴是日期,Y轴是一天中的时间。 Z轴应该是温度。

理想情况下,我想使用persp之类的基本功能之一来创建一个这样的图形(但Z值正确):

enter image description here

我的问题的核心(为什么我还找不到自己的解决方案)是因为绘图的示例使用函数和范围序列作为输入。我不明白如何将表格中的数据准备为绘图功能的正确格式。

如上所述生成图的简单方法是什么?

1 个答案:

答案 0 :(得分:1)

没有花哨的阴影,但这应该可以给您一个想法

d <- rep(1:5, each=10)
m <- rep((0:9)*144, 5)
v <- sin(seq(0, 1, length.out=50)*2*pi*5) + (1:50)/50

temperature <- matrix(v, ncol=10, byrow=TRUE)

par(mar=c(2, 2, 2, 2))

day <- unique(d)
tod <- unique(m)/60

persp(day, tod, temperature, theta=50, phi=20,
  ticktype="detailed", ylab="Time of day (hr)")

enter image description here

本质上,您将温度值分布在矩阵中,其尺寸取自日期和分钟矢量。
我永远不会完全记得它是byrow=TRUE还是FALSE,以及什么矢量决定了哪个尺寸,所以我只用眼睛检查一下,直到看起来正确为止。

其他两个选择

library(plot3D) # an extension of persp()
persp3D(day, tod, temperature, theta=50, phi=20)

library(rgl) # also similar to persp(), but interactive
persp3d(day, tod, temperature, col=cm.colors(100))