2015-07-02 177 views
1

我已經創建了一個關於x軸的時間序列和y軸上的計數值的繪圖。我想知道如何更改時間序列x軸上的時間間隔,以便時間間隔爲每3小時。我不確定如何將一個簡單的方法應用於時間序列,例如at = seq(0,100,10)。其次,是否有可能在數據集中沒有表示的時間使用文本標籤?即下面的示例數據從09:29開始以10分鐘爲間隔,但是可以使用x軸上的時間值嗎?我假設要做到這一點的唯一方法是手動列出文本字符串中的時間,但想知道我是否缺少任何東西?任何建議將不勝感激。如何更改R中日期時間序列的x軸標籤間隔

示例數據:

> dput(df) 
structure(list(datetime = structure(c(1396603740, 1396604340, 
1396604940, 1396605540, 1396606140, 1396606740, 1396607340, 1396607940, 
1396608540, 1396609140, 1396609740, 1396610340, 1396610940, 1396611540, 
1396612140, 1396612740, 1396613340, 1396613940, 1396614540, 1396615140, 
1396615740, 1396616340, 1396616940, 1396617540, 1396618140, 1396618740, 
1396619340, 1396619940, 1396620540, 1396621140, 1396621740, 1396622340, 
1396622940, 1396623540, 1396624140, 1396624740, 1396625340, 1396625940, 
1396626540, 1396627140, 1396627740, 1396628340, 1396628940, 1396629540, 
1396630140, 1396630740, 1396631340, 1396631940, 1396632540, 1396633140, 
1396633740, 1396634340, 1396634940, 1396635540, 1396636140, 1396636740, 
1396637340, 1396637940, 1396638540, 1396639140, 1396639740, 1396640340, 
1396640940, 1396641540, 1396642140, 1396642740, 1396643340, 1396643940, 
1396644540, 1396645140, 1396645740, 1396646340, 1396646940, 1396647540 
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), count = c(46, 
45, 47, 43, 49, 46, 46, 44, 44, 44, 45, 49, 50, 46, 45, 43, 47, 
48, 48, 46, 47, 46, 46, 44, 46, 44, 45, 49, 44, 46, 44, 48, 44, 
42, 44, 50, 44, 44, 48, 43, 43, 46, 44, 49, 49, 44, 42, 45, 45, 
48, 46, 45, 46, 43, 40, 50, 39, 42, 48, 44, 44, 46, 43, 47, 46, 
41, 43, 43, 46, 48, 45, 48, 43, 42)), .Names = c("datetime", 
"count"), row.names = c(NA, -74L), class = "data.frame") 

>head(df) 
      datetime count 
1 2014-04-04 09:29:00 46 
2 2014-04-04 09:39:00 45 
3 2014-04-04 09:49:00 47 
4 2014-04-04 09:59:00 43 
5 2014-04-04 10:09:00 49 
6 2014-04-04 10:19:00 46 

示例代碼(到地塊的所有日期時間):

#Convert datetime character string to POSIXct format 
df$datetime = as.POSIXct(strptime(df$datetime, format="%d/%m/%Y %H:%M:%S"), tz="UTC") 

plot(df$datetime, df$count, axes=FALSE) 
axis(2,las=2) 
axis.POSIXct(1, at=df$datetime, labels=format(df$datetime, 「%H:%M")) #datetime format can be changed as desired 
lines(df$datetime, df$count, col="grey22") 

回答

1

第一件事首先,讓我們來糾正你的axis.POSIXct電話:

axis.POSIXct(1, at=df$datetime, format="%H:%M") 

參數format讓利您可以定義您的時間格式,而無需逐個格式化每個標籤。我們將使用at這個參數來定義滴答的位置。

首先可以定義使用日期的序列seq施加到POSIXt對象那兒(見?seq.POSIXt)其中參數by可以設置有自定義名稱如"3 hours"

一個字符串,其包含一個「秒「,」分「,」小時「,」日「,」DSTday「,」星期「,」月「或」年「。這可以有選擇地在前面加一個(正數或負數)整數和一個空格,或者後面加上「s」。

因此:

seq(df$datetime[1], tail(seq$datetime,1), by="3 hours") 
# [1] "2014-04-04 09:29:00 UTC" "2014-04-04 12:29:00 UTC" "2014-04-04 15:29:00 UTC" "2014-04-04 18:29:00 UTC" "2014-04-04 21:29:00 UTC" 

現在讓序列開始在整整一個小時,一個需要用round(見?round.POSIXt):

round(df$datetime[1], "hour") 
# [1] "2014-04-04 09:00:00 UTC" 
seq(round(df$datetime[1],"hour"), tail(df$datetime,1), by="3 hours") 
# [1] "2014-04-04 09:00:00 UTC" "2014-04-04 12:00:00 UTC" "2014-04-04 15:00:00 UTC" "2014-04-04 18:00:00 UTC" "2014-04-04 21:00:00 UTC" 

總而言之,你的代碼就變成了:

df <- structure(list(datetime = structure(c(1396603740, 1396604340, 1396604940, 1396605540, 1396606140, 1396606740, 1396607340, 1396607940, 1396608540, 1396609140, 1396609740, 1396610340, 1396610940, 1396611540, 1396612140, 1396612740, 1396613340, 1396613940, 1396614540, 1396615140, 1396615740, 1396616340, 1396616940, 1396617540, 1396618140, 1396618740, 1396619340, 1396619940, 1396620540, 1396621140, 1396621740, 1396622340, 1396622940, 1396623540, 1396624140, 1396624740, 1396625340, 1396625940, 1396626540, 1396627140, 1396627740, 1396628340, 1396628940, 1396629540, 1396630140, 1396630740, 1396631340, 1396631940, 1396632540, 1396633140, 1396633740, 1396634340, 1396634940, 1396635540, 1396636140, 1396636740, 1396637340, 1396637940, 1396638540, 1396639140, 1396639740, 1396640340, 1396640940, 1396641540, 1396642140, 1396642740, 1396643340, 1396643940, 1396644540, 1396645140, 1396645740, 1396646340, 1396646940, 1396647540), class = c("POSIXct", "POSIXt"), tzone = "UTC"), count = c(46, 45, 47, 43, 49, 46, 46, 44, 44, 44, 45, 49, 50, 46, 45, 43, 47, 48, 48, 46, 47, 46, 46, 44, 46, 44, 45, 49, 44, 46, 44, 48, 44, 42, 44, 50, 44, 44, 48, 43, 43, 46, 44, 49, 49, 44, 42, 45, 45, 48, 46, 45, 46, 43, 40, 50, 39, 42, 48, 44, 44, 46, 43, 47, 46, 41, 43, 43, 46, 48, 45, 48, 43, 42)), .Names = c("datetime", "count"), row.names = c(NA, -74L), class = "data.frame") 
plot(df$datetime, df$count, axes=FALSE) 
axis(2,las=2) 
axis.POSIXct(1, at=seq(from=round(df$datetime[1],"hour"), 
         to=tail(df$datetime,1), 
         by="3 hours"), 
       format="%H:%M") 
lines(df$datetime, df$count, col="grey22") 

enter image description here

+0

@ plannapus。很好,這正是我一直在尋找的。非常感謝! – jjulip