2011-08-23 144 views
8

這些數據是一系列日期和時間。如何用R創建時間散點圖?

date time 
2010-01-01 09:04:43 
2010-01-01 10:53:59 
2010-01-01 10:57:18 
2010-01-01 10:59:30 
2010-01-01 11:00:44 
… 

我的目標是用水平軸(x)上的日期和垂直軸上的時間(y)來表示散點圖。如果同一日期有多個時間,我想我也可以添加一個顏色強度。

這是很容易地創建日期的直方圖。

mydata <- read.table("mydata.txt", header=TRUE, sep=" ") 
mydatahist <- hist(as.Date(mydata$day), breaks = "weeks", freq=TRUE, plot=FALSE) 
barplot(mydatahist$counts, border=NA, col="#ccaaaa") 
  1. 我還沒有想出如何創建散點圖,其中軸是日期和/或時間。
  2. 我還想能夠有沒有必要用線性日期YYYY-MM-DD,還可以根據個月,如MM-DD軸(所以不同年份的累積),甚至與周旋轉。

任何幫助,RTFM URI拍打或暗示是值得歡迎的。

回答

15

ggplot2包處理的日期和時間很容易。

創建一些日期和時間數據:

dates <- as.POSIXct(as.Date("2011/01/01") + sample(0:365, 100, replace=TRUE)) 
times <- as.POSIXct(runif(100, 0, 24*60*60), origin="2011/01/01") 

df <- data.frame(
    dates = dates, 
    times = times 
) 

然後得到一些ggplot2魔法。 ggplot會自動處理日期,但要獲得格式正確時間軸使用scale_y_datetime():由周

library(ggplot2) 
library(scales) 
ggplot(df, aes(x=dates, y=times)) + 
    geom_point() + 
    scale_y_datetime(breaks=date_breaks("4 hour"), labels=date_format("%H:%M")) + 
    theme(axis.text.x=element_text(angle=90)) 

enter image description here


關於你的問題的最後一部分,對分組等:爲了實現這可能需要將數據預先彙總到所需的桶中。您可以使用plyr,然後將結果數據傳遞給ggplot

+0

非常感謝安德烈。當場^ H情節:) – karlcow

+0

我安裝了ggplot2,因爲它似乎ggplot不可用。 – karlcow

+0

@karlcow我的歉意。是的,我應該說'ggplot2'。回答編輯以反映這一點。 – Andrie

0

我念叨as.POSIXct,strptime,strftime的,和difftime啓動。這些和相關的功能應該允許你提取你想要的數據子集。格式化有點棘手,所以請參閱幫助文件中的示例。
而且,一旦你的日期將被轉換爲POSIX類,as.numeric()將全部轉換爲數值,因此容易進行排序,情節等

編輯:安德烈的建議,發揮瓦特/ ggplot到簡化你的軸規格是一個很好的。