我根据这个答案绘制按周数分组的小时数据:https://stackoverflow.com/a/48196838/5235575
我的例子显示2016年的前两周从2016年1月1日星期一00:00开始,到2016年1月17日星期日23:00结束
如何将主网格和x轴的相应标签与箱形图的胡须对齐?
ggplot(table, aes(x=as.Date(datetime_hour), y=count_hour, group=format(as.Date(datetime_hour),"%W"))) + geom_boxplot() + scale_x_date(date_breaks = "week", date_labels="%W") + labs(x = "week number")
答案 0 :(得分:0)
IIUC - 只需在aes
的 x 和组参数中传递计算出的周数:
ggplot(table, aes(x = format(as.Date(table$datetime_hour),"%W"), y = count_hour,
group = format(as.Date(table$datetime_hour),"%W"))) +
geom_boxplot() + labs(x = "week number")
或者,将其创建为新变量:
table$week_num <- format(as.Date(table$datetime_hour),"%W")
ggplot(table, aes(x = week_num, y = count_hour, group = week_num)) +
geom_boxplot() + labs(x = "week number")
使用随机数据进行演示(播种再现性):
set.seed(6776)
table <- data.frame(
datetime_hour = Sys.Date() - seq(30),
count_hour = rnorm(30, mean = 100, sd = 50)
)
table$week_num <- format(as.Date(table$datetime_hour),"%W")
ggplot(table, aes(x = week_num, y = count_hour, group = week_num)) +
geom_boxplot() + labs(x = "week number")
答案 1 :(得分:0)
不是一个完美的解决方案,但我认为问题在于将数据中的中断与图中的中断对齐。我使用了您链接到的SO帖子中的示例数据,并添加了一个变量,我将日期缩短为几周。这给出了一个因子,我将其用作ggplot
中的x输入,并使用scale_x_discrete
使用函数格式化标签。
library(ggplot2)
# From linked SO post
df <- data.frame(
value = rnorm(62),
my.date = seq(as.Date("2013-12-01"), as.Date("2014-01-31"), by="1 day")
)
# Cut dates into weeks
df$date_brk <- cut(df$my.date, breaks = "week")
ggplot(df, aes(x = date_brk, y = value)) +
geom_boxplot() +
scale_x_discrete(labels = function(x) format(as.Date(x), "%W")) +
theme(panel.grid.minor.x = element_blank())
由reprex package(v0.2.0)创建于2018-04-04。
使用lubridate
包可能有更好的方法。