R中开始,结束,持续时间的时间序列可视化

Mit*_*ops 0 r data-visualization time-series ggplot2 candlestick-chart

我有以下数据:

> Data
          Date    Start       End
1   2011-11-15 12:01:27 12:30:15 
2   2011-11-16 12:01:25 12:32:15 
3   2011-11-17 12:01:02 12:39:12 
4   2011-11-19 12:01:12 12:30:18
Run Code Online (Sandbox Code Playgroud)

我还附加了一个持续时间列

Data[,4] <- as.numeric(difftime(Data$End,Data$Start))
names(Data)[4] <- "Duration"
Run Code Online (Sandbox Code Playgroud)

我脑子里有一个Start,End的可视化,看起来有点像股票烛台OHLC图表,其中x值是Date,y是End - Start.

End位于顶部,矩形下降到Start ---矩形的高度随持续时间的变化而变化.也就是说,每个日期都有一个不同的矩形高度,由开始和结束之间的差异决定.

这里的x轴从2011-11-15到2011-11-19.y轴从12:00:00到12:40:00.

任何ggplot向导都能看到一个简单的方法吗?由于Start和End都随着时间的推移而变化,我是否必须使用geom_ribbon或geom_polygon而不是geom_bar或geom_area?

如果持续时间的值大于2个标准差,那么条形图的颜色会变为红色,这将是非常酷的!

csg*_*pie 5

我使用与nico类似的结构(谢谢!):

date = c("2011-11-15", "2011-11-16", "2011-11-17", "2011-11-19")
start = c("12:01:27", "12:01:25", "12:01:02", "12:01:12")
end = c("12:30:15", "12:32:15", "12:39:12", "12:30:18")
Run Code Online (Sandbox Code Playgroud)

接下来,我们将其放在包含矩形角的数据框中:

##I've made the rectangles 2 hours wide
df = data.frame(date = as.POSIXct(date),
         ystart = as.POSIXct(start, format="%H:%M:%S"), 
         yend = as.POSIXct(end, format="%H:%M:%S"),
         xstart=as.POSIXct(paste(date, "12:00:00"), format="%Y-%m-%d %H:%M:%S"),
         xend = as.POSIXct(paste(date, "14:00:00"), format="%Y-%m-%d %H:%M:%S"))
Run Code Online (Sandbox Code Playgroud)

然后我们只使用geom_rect:

ggplot() + geom_rect(data=df, aes(ymin=ystart, ymax=yend,
                           xmin=xend, xmax=xstart))
Run Code Online (Sandbox Code Playgroud)

如果您想根据条件将其中一些设置为红色,只需在数据框上创建一个额外的列:

##Your condition is something to do with the sd
df$isRed = c(TRUE, FALSE)
Run Code Online (Sandbox Code Playgroud)

然后添加两个ggplot图层:

ggplot() + geom_rect(data=subset(df, !isRed), aes(ymin=ystart, ymax=yend,
                           xmin=xend, xmax=xstart)) +
           geom_rect(data=subset(df, isRed), aes(ymin=ystart, ymax=yend,
                           xmin=xend, xmax=xstart), colour="red")
Run Code Online (Sandbox Code Playgroud)

示例图

在此输入图像描述