2017-04-19 21 views
0

我遇到了R問題:如何繪製來自不同天數的R中的數據(僅基於小時:分鐘)?

我有一個名爲「teste」的數據集,它有一個'Date'列(它位於POSIXct,format =「%Y-%m-%d%H:% M:%S「),5個月內每10分鐘讀取一次。

我需要的變量的比較在同一時間,但在不同的日子。例如,每週六在數據集中繪製覆蓋圖。我已經有了用於子集數據框架的代碼,並且只有星期六。

這裏是數據的一個示例:

DATE    ID VAR1 VAR2 VAR3 
1 2016-09-19 00:07:47 79 19  0 OPN 
2 2016-09-19 00:17:47 79 18  1 OPN 
3 2016-09-19 00:27:47 79 16  3 OPN 
4 2016-09-19 00:37:47 79 15  4 OPN 
5 2016-09-19 00:47:47 79 16  3 OPN 
6 2016-09-19 00:57:47 79 16  3 OPN 

這裏是從該數據中dput:

結構(列表(日期星=結構(C(1474236467,1474237067,1474237667,1474841253,1474841853 ,1474842453),類= C( 「POSIXct」, 「POSIXt」),tzone = 「」),ID = C(79L,79L,79L,79L,79L,79L),SLOTS = C(19L,18L,16L, 14L,15L,15L),BIKES = C(0L,1L,3L,8L,7L,7L),STATUS =結構(C(2L,2L,2L,2L,2L,2L),.Label = C(「CLS 「,」OPN「),class =」factor「)),.Names = c(」FECHA「,」ID「,」SLOTS「,」BIKES「,」STATUS「),row.names = c(1L,2L ,3L,1004L,1005L,1006L),class =「d ata.frame「)

我試着這樣做:(用於包裝lubridate)

plot(as.POSIXct(paste(hour(teste$FECHA),":",minute(teste$FECHA),sep = ""), format = "%H:%M"),teste$BIKES) 

enter image description here

它的工作原理,但使用 '粘貼' 是definetely不是這樣做的最佳方式。可能有一種更簡單更優雅的方式,對吧?如果是,如何?

如果我用type =「lines」對它進行繪圖,我有一個問題,因爲它不知道一天的最後一次讀數不應該與下一個的第一個讀數「連接」,從而得出如下結果:(見線路穿越所有24至0小時圖)

enter image description here

我雖然大約在同一時間ploting有一天,使用情節,然後用線功能,但問題是,我不知道如何每天都有很多讀物。每天應該有6 * 24 = 144的讀數,但有些讀數爲143,142(因爲在獲取數據時出現問題)。

我很感激任何幫助。

+0

你可以試試'庫(GGPLOT2); ggplot(數據,AES(X = DATE,Y = VAR1))+ geom_point()+ geom_line()' – Jimbou

+0

@Jimbou我嘗試並將其繪製爲不同的日子,我想有所有的圖中相同的0小時直到24小時制,即使數據來自不同的日期。 這是我的了:http://i.imgur.com/R8tFadg.png –

+1

然後請相應地修改您的可重複的例子數據。您可以使用'dput(subset_of_your_data)'並將輸出粘貼到您的問題中。 – Jimbou

回答

0

您可以嘗試

# add factor to differentiate between the different days 
d$day <- factor(strftime(d$FECHA, format="%Y-%m-%d")) 
# add hours, set one day 
d$time <- as.POSIXct(strftime(d$FECHA, format="%H:%M:%S"), format="%H:%M:%S") 
# color per day 
ggplot(d, aes(x=time, y=BIKES, col=day)) + 
     geom_point() + 
     geom_line() + 
     scale_x_datetime(limits = as.POSIXct(c("2017-04-19 00:00:00", "2017-04-19 24:00:00")), date_labels = "%H:%M") 
# or facet_wrap/grid 
ggplot(d, aes(x=time, y=BIKES)) + geom_point() + geom_line() + 
    facet_grid(~day)+ 
    scale_x_datetime(limits = as.POSIXct(c("2017-04-19 00:00:00", "2017-04-19 24:00:00")), date_labels = "%H:%M") 

enter image description here

# or use the wrap function instead of the grid function 
    facet_wrap(~day, scales = "free_y") 
相關問題