【问题标题】:R: Calendar like boxplotsR:类似于箱线图的日历
【发布时间】:2013-07-09 11:56:03
【问题描述】:

我有一张这样的桌子:

> workingtime
         DATE TIME_START TIME_END    SHIFT
1  2013-06-04      00:00    08:00  noshift
2  2013-06-04      08:00    16:00       I0
3  2013-06-04      16:00    20:00 callduty
4  2013-06-04      20:00    22:30 overtime
5  2013-06-04      22:30    24:00 callduty
6  2013-06-05      00:00    07:00 callduty
7  2013-06-05      07:00    08:00 overtime
8  2013-06-05      08:00    16:00       I0
9  2013-06-05      16:00    20:00 callduty
10 2013-06-05      20:00    22:30 overtime
11 2013-06-05      22:30    24:00 callduty

我需要的是类似于这个帖子的情节:Plot time(x axis) and time of day & duration(y axis) of episodes

但是:

  • 我想在 x 轴上显示的时间范围仅为一周
  • y 轴旁边每天应该有一个箱线图(一周中的每一天) - 显示不同的颜色(每个工作时间 $SHIFT)
  • 结果应该有点像日历周视图(iCal、Google 日历等)

【问题讨论】:

标签: r data-visualization


【解决方案1】:

对于任何情节,你总是可以从头开始,因为在 R 中几乎所有东西都有原语。在你的情况下,我会这样做。具体来说,我会使用日期转换工具和polygon 函数。这是一个超级快速的版本,它并没有真正处理好时间。

workingtime$s <- as.numeric( gsub( ":.*", "", workingtime$TIME_START ) ) + as.numeric( gsub( ".*:", "", workingtime$TIME_START ) ) / 60
workingtime$e <- as.numeric( gsub( ":.*", "", workingtime$TIME_END ) ) + as.numeric( gsub( ".*:", "", workingtime$TIME_END ) ) / 60
plot( NULL, xlim= c( 0.5, 7.5 ), ylim= c( 24, 0 ), xaxt= "n", xlab= "Week", ylab= "Hour" )
axis( 1, at=seq( 0.5, 7.5 ), labels= rep( "", 8 ) )
workingtime$day <- as.numeric( factor( workingtime$DATE ) )
for( i in 1:nrow( workingtime ) ) { 
  x <- c( -0.5, 0.5, 0.5, -0.5 ) + workingtime[i, "day"]
  y <- rep( c( workingtime[i,"s"], workingtime[i,"e"] ), each= 2 )
  polygon( x, y, col= workingtime[i,"SHIFT"]  ) 
}

使用strptimestrftimeas.Date 可以大大改善这一点。

【讨论】:

    【解决方案2】:

    TeachingDemos 包中的cal 函数可用于在当前设备上绘制日历,然后将绘图添加到特定日期。这可能会完成你想要的。如果您只想显示 1 周而不是整个月,那么您可以修改 cal 函数的代码以仅显示您想要的一周。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 2021-03-31
      • 2018-03-26
      • 1970-01-01
      相关资源
      最近更新 更多