我有不同的数据帧(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中转换数据。 预先感谢您的帮助,希望我已经足够清楚了!
答案 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))
哪个情节
样本数据:
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))