簡體   English   中英

如何在R中繪制兩列“時間”,即數據幀的Start_time和End_Time

[英]How to plot two columns of “Time” that is Start_time and End_Time of a data frame in R

我是R編程的新手 ,正在嘗試學習一些基本的繪圖。 我有一些問題

我的數據框看起來像這樣

EVENT_TYPE   DATE           TIME_START    TIME_END
event A      9/18/2014      14:47:01      16:53:07
event B      9/18/2014      15:52:16      17:08:30
event A      9/18/2014      16:26:19      16:53:58
event C      9/20/2014      19:25:51      19:25:51
event B      9/23/2014       3:40:39       4:38:07
event D      9/25/2014       8:15:40       8:59:40

問題1.我想繪制2014年9月18日至2014年9月23日的數據。 如何在R中選擇日期范圍?

問題2。我想在y軸上繪制EVENT_TYPE,在x軸上繪制DATE(或月列),並在圖表上繪制“ TIME_START”和“ TIME_END”,以便我可以比較事件之間的比較。

我搜索了此類問題,但沒有得到任何答案。

非常感謝任何幫助。 請幫助我學習R。

首先將您的開始時間和結束時間轉換為R中的日期時間:

x <- transform(x,
               start=as.POSIXct(paste(DATE, TIME_START), format='%m/%d/%Y %H:%M:%S'),
               end=as.POSIXct(paste(DATE, TIME_END), format='%m/%d/%Y %H:%M:%S'))

然后,您可以使用ggplot並在時間軸上為每個事件繪制一個矩形:

  • x軸為日期時間
  • 從每個事件的開始到結束繪制一個矩形
  • 習慣yyend的原因是,兩個相同類型的重疊事件(例如,2014年9月18日的兩個事件A)在視覺上彼此分開。 (我想你可以用geom_bar()position="jitter"做類似的事情,但我不知道怎么做)。
  • 排序y的原因僅僅是將相似事件在Y軸上分組在一起,如果您不希望使用它,只需對1:nrow(x) y使用1:nrow(x)
  • scale_y_discrete(breaks=NULL)僅用於抑制y數字。 您可以根據需要自定義它們。

贈送:

library(ggplot2)
ggplot(transform(x, y=order(EVENT_TYPE, start)),
       aes(x=start, xend=end, y=y, yend=y, col=EVENT_TYPE)) +
  geom_segment(size=3) +
  scale_y_discrete(breaks=NULL)

在此處輸入圖片說明

如前所述,由於您的x軸很大(跨越數天),並且每個事件僅持續1-2個小時,因此您幾乎看不到每個事件的進度條。 您將不得不考慮如何明智地顯示數據,但這不是問題的重點。 例如,如果您僅查看前三個事件,就會更加清楚:

x2 <- x[1:3,]
ggplot(transform(x2, y=order(EVENT_TYPE, start)),
       aes(x=start, xend=end, y=y, yend=y, col=EVENT_TYPE)) +
  geom_segment(size=3) +
  scale_y_discrete(breaks=NULL)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM