将时间序列绘制成热力图

4

我有一张包含时间戳和数值的数据框(每个月的数值大约每5分钟记录一次),现在我想画出图表,x轴为日期,y轴为当天时间,颜色代表数值。最好能够控制y轴的分组(5分钟,10分钟,15分钟...每个分组的数值为该分组中数值的平均值)。

我正在尝试使用ggplot2,但是我无法得到一个合理的结果。

p_heat <- ggplot(data = data,
                 aes(x = days(timestamp),
                     y = minutes(timestamp) + hours(timestamp) * 60, fill = value)) +  
            geom_tile()

可以按照以下方式生成测试数据:

data <- data.frame(timestamp = seq(from = as.POSIXct("2013-09-01 00:00:00"), 
                                   to = as.POSIXct("2013-10-01 00:00:00"), by = "5 mins"),
                   value = runif(8641, 0, 1))

这是目前我能得到的最好结果 :) 我也尝试使用scale_x/y_date()进行调整。
我会很高兴得到一些提示,帮助我走向正确的方向。谢谢!
2个回答

8

您是在寻找类似这样的东西吗?

library(ggplot2)   

# create date variable for the x-axis
df$date <- as.Date(df$timestamp, format = "%Y-%m-%d")

# get H:M components
df$hm <- format(df$timestamp, "%H:%M")    

# create y-axis breaks and labels
lab <- with(df, paste(format(df$timestamp, "%H"), "00", sep = ":"))

gg <- ggplot(data = df, aes(x = date, y = hm, fill = value)) +
  geom_tile() +
  scale_y_discrete(breaks = lab)

gg

enter image description here


嗨,亨利克,感谢您的帮助,但在y轴上,我需要一整天的时间以分钟为单位,或者更好的是将数据放入5分钟、10分钟等容器中。因此,主要问题是将日期放在x轴上,将当天的时间放在y轴上。 - domwoe

0

也许可以尝试这个:

p_heat <- ggplot(data=data, aes(x=timestamp$mday ,y=timestamp$min+timestamp$hour*60)) 
    + stat_density2d(geom="tile", aes(fill = value), contour = FALSE)

这里是相关文档: http://docs.ggplot2.org/current/stat_density2d.html


获取以下错误:(function (x, y, h, n = 25, lims = c(range(x), range(y))) : 带宽必须严格为正数。 如果(nrow(layer_data) == 0) return()中的参数长度为0,则会出现错误。通过谷歌搜索,似乎原因是我有一个离散比例尺。 - domwoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接