我的一些数据包含以秒为单位表示的持续时间值。我正在使用Duration
包中的lubridate
数据类型。
要绘制此数据,我正在从barchart()
包中调用lattice
。问题是值以秒为单位显示。有什么办法可以控制轴标签的格式化吗?
这个数字显示了我现在所得到的:
...我正在使用它生成:
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轴标签方面):
更新:添加一些示例csv数据:
group,val2,val1
pilot01,t1,429.226015
pilot01,t3,693.795607
pilot02,t1,262.798468
pilot02,t3,325.854107
答案 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"
)
如果你需要它从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))))