2013-10-03 130 views
3

我有一個帶時間戳和值的數據框(每個值大約每5分鐘一個月)。 現在我想在x軸上繪製一天的圖形,在y軸上繪製一天中的時間,並將顏色作爲值。最好的辦法是,如果我可以控制y軸上的裝倉(5分鐘,10分鐘,15分鐘......每個裝箱的平均值)。R:繪製時間序列作爲熱圖

我正在試驗ggplot2,但我無法得到合理的結果。

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

這是我能得到到目前爲止:) 我也試圖與SCALE_X打得最好的/ y_date()

我想:

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

測試數據可以如下產生對於將我推向正確方向的一些提示感到高興。謝謝!

+0

亨裏克您好,我沒有尋找答案,這個特殊的[主題](http://stackoverflow.com/questions/8784095/r-ggplot-heatmap-using-geom-tile這是我的出發點。這是我的出發點。但我在裝箱我的數據爲y軸的問題 – domwoe

+0

添加一個可重現的數據集 – domwoe

回答

5

難道這樣的事情你正在尋找?

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

+0

Hi Henrik,感謝您的幫助,但是在y軸上,我需要在幾分鐘內完成整個一天,或者甚至更好地將數據放入5分鐘,10分鐘,...箱中,所以重點是要有一天y軸上當天的x軸和時間。 – 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

+0

獲取以下錯誤:錯誤in(function(x,y,h,n = 25,lims = c(range(x) (y))): 帶寬必須嚴格爲正 Fehler in if(nrow(layer_data)== 0)return():參數hatLänge0.谷歌搜索之後,似乎原因是我有一個離散的比例 – domwoe