绘制持续时间

时间:2013-02-08 18:08:39

标签: r lattice lubridate

我的一些数据包含以秒为单位表示的持续时间值。我正在使用Duration包中的lubridate数据类型。

要绘制此数据,我正在从barchart()包中调用lattice。问题是值以秒为单位显示。有什么办法可以控制轴标签的格式化吗?

这个数字显示了我现在所得到的:

Current

...我正在使用它生成:

barchart(val1 ~ val2, groups=group, mydata, 
         auto.key=list(
           columns=1, 
           space="right", 
           text=c("Pilot 1","Pilot 2")
           ), 
         main="Title",
         xlab="Tasks", ylab="Duration"
)

相反,我想更接近这一点(在y轴标签方面):

Intended


更新:添加一些示例csv数据:

group,val2,val1
pilot01,t1,429.226015
pilot01,t3,693.795607
pilot02,t1,262.798468
pilot02,t3,325.854107

1 个答案:

答案 0 :(得分:1)

在Lattice中,scales参数控制轴;可能与这个未经测试的代码类似:

  ..., scales=list(y=list(at=seq.POSIXt(0, 700, length= 6), 
                          labels=format(seq.POSIXt(0, 700, length= 6), "%H:%M:%S:)
                   ), ...

要以测试形式获取此信息,我需要将秒转换为POSIXt格式:

mydata$val1time <- as.POSIXct(mydata$val1, origin="1970-01-01")
barchart(val1time ~ val2, groups=group, mydata, horizontal=FALSE, 
         scales=list( y=list( 
            at=seq.POSIXt(from=as.POSIXct(0, origin="1970-01-01"), 
                          to=as.POSIXct(700, origin="1970-01-01"), length= 12), 
            labels=format( seq.POSIXt(from=as.POSIXct(0, origin="1970-01-01"), 
                    to=as.POSIXct(720, origin="1970-01-01"), length= 12), "%H:%M:%S")
                     )   ), 
       auto.key=list(
           columns=1, 
           space="right", 
           text=c("Pilot 1","Pilot 2")
           ), 
         main="Title", xlab="Tasks", ylab="Duration"
)

enter image description here

如果你需要它从0开始,你需要添加:

 ..., ylim=range( as.numeric( seq.POSIXt(from=as.POSIXct(0, origin="1970-01-01"), 
                                    to=as.POSIXct(700, origin="1970-01-01"),
                                    length= 12))) ,

为了显示一整套命令给出结果(添加了'ylim'参数,我将我使用的代码粘贴到数据框名称dat

 dat <- read.table(text="group,val2,val1
 pilot01,t1,429.226015
 pilot01,t3,693.795607
 pilot02,t1,262.798468
 pilot02,t3,325.854107", header=TRUE, sep=",")
dat$val1time <- as.POSIXct(dat$val1, origin="1970-01-01")

barchart(val1time ~ val2, groups=group, dat, horizontal=FALSE, 
          scales=list( y=list( at=seq.POSIXt(from=as.POSIXct(0, origin="1970-01-01"), to=as.POSIXct(700, origin="1970-01-01"), length= 12), 
                              labels=format( seq.POSIXt(from=as.POSIXct(0, origin="1970-01-01"), to=as.POSIXct(720, origin="1970-01-01"), length= 12), "%H:%M:%S")
                      )   ), 
        auto.key=list(
            columns=1, 
            space="right", 
            text=c("Pilot 1","Pilot 2")
            ), 
          main="Title", xlab="Tasks", ylab="Duration"
 , ylim=range( as.numeric( seq.POSIXt(from=as.POSIXct(0, origin="1970-01-01"), 
                                    to=as.POSIXct(700, origin="1970-01-01"),
                                    length= 12))))