按周计算的ggplot2箱图

时间:2014-01-24 10:11:23

标签: r ggplot2

此代码生成一个boxplot:

df <- data.frame(value = rnorm(62), my.date = seq(as.Date("2013-12-01"), as.Date("2014-01-31"), by="1 day"))

library(ggplot2)
ggplot(df, aes(as.Date(my.date), value)) + geom_boxplot() + scale_x_date(minor_breaks = "1 week", labels = date_format("%W\n%b"))

enter image description here

如何制作12月1日至1月31日期间每周有单个箱图的地块?所以在单一情节中,应该有大约8个箱图。更喜欢使用ggplot()scale_x_date()的解决方案。

3 个答案:

答案 0 :(得分:2)

一种选择是在使用ggplot

之前转换日期
library(ggplot2)
df <- data.frame(value = rnorm(62), 
my.date = seq(as.Date("2013-12-01"), as.Date("2014-01-31"), by="1 day"))
weeks <- format(df$my.date, "%Y/%W")
weeks <- factor(weeks, levels = unique(weeks))

ggplot(df, aes(weeks, value)) +
    geom_boxplot()

答案 1 :(得分:2)

library(ggplot2)    
ggplot(df, aes(format(as.Date(my.date), "%W\n%b"), value)) + geom_boxplot()  

修改

订购日期:

ggplot(df, aes(reorder(format(as.Date(my.date), "%W\n%b"), 
                       as.Date(my.date)), 
               value)) + 
  geom_boxplot() 

答案 2 :(得分:1)

这符合@ luciano要求保留scale_x_date

功能的要求
library('scales')
library(ggplot2)
df <- data.frame(value = rnorm(62), my.date = seq(as.Date("2013-12-01"), as.Date("2014-01-31"), by="1 day"))
ggplot(df, aes(x=as.Date(my.date), y=value, group=format(as.Date(my.date),"%W-%b"))) + geom_boxplot() + scale_x_date(date_breaks = "1 week", date_labels="%Y-%b-%d")

Boxplot using scale_x_date

或者,如果您不希望按周#分组的数据 - 这可以让您在大多数新年时间内进行分组 - 您可以按周结束星期日,如下所示。通过一些这样的代码可以实现从周日周末到周五的调整 ceiling_date(x, "week") + ifelse(weekdays(x) %in% c("Saturday", "Sunday"), 5, -2)

ggplot(df, aes(x=as.Date(my.date), y=value, group=ceiling_date(my.date, "week"))) + geom_boxplot() + scale_x_date(date_breaks = "1 week", date_labels="%Y-%b-%d")

Group by weekending Sundays