R-避免使用lubridate hms和ggplot显示毫秒

时间:2018-06-22 07:55:43

标签: r ggplot2 lubridate

我有不同的数据帧(df),每个人的持续时间向量都是这样的:

  Duration
  02:05:30
  01:00:58
  00:40:21
  00:54:26

我想做的是通过以下方式用ggplot绘制这些持续时间:

    df$Duration <- lubridate::hms(df$Duration)

    p <- ggplot(df, aes(Duration)) + scale_x_time("Duration") + 
    stat_bin(aes(y =..count..), bins=30, fill = 'darkblue') + 
    scale_y_continuous(sec.axis = sec_axis(~./nrow(df), labels=percent))

这在80%的情况下都可以正常工作,但是,有时在图中,带有“ Duration”的x轴以“%H:%M:%S”格式显示时间,其中秒具有6个十进制数字(即02:02:00.000000),这不是我想要的(我想改为02:02:00)。我不知道为什么这样做,为什么只对我拥有的某些数据帧执行此操作,所以我正在使用 lubridate :: hms ,因为这是处理持续时间大于24小时(不是吗?),所以我不想在POSIXct中转换数据。 预先感谢您的帮助,希望我已经足够清楚了!

1 个答案:

答案 0 :(得分:0)

如果您希望将X轴标签设为2H 5M 30S之类的标签,则可以尝试这种方法

library(ggplot2)
library(lubridate)

df$Duration <- hms(df$Duration)

ggplot(df, aes(period_to_seconds(Duration))) +     #converted duration to seconds for plotting
  stat_bin(aes(y = ..count..), bins = 30, fill = 'darkblue') + 
  scale_y_continuous(sec.axis = sec_axis(~./nrow(df), name = "percent")) +
  scale_x_continuous("Duration", labels = df$Duration, breaks = period_to_seconds(df$Duration)) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

哪个情节

enter image description here

样本数据:

df <- structure(list(Duration = c("02:05:30", "01:00:58", "00:40:21", 
"00:54:26")), .Names = "Duration", class = "data.frame", row.names = c(NA, 
-4L))
相关问题