R 子组轴ggplot2类似于Excel数据透视图

R 子组轴ggplot2类似于Excel数据透视图,r,ggplot2,dplyr,R,Ggplot2,Dplyr,我正在尝试将月份和年份作为子组绘制到带有ggplot2的图表中。也就是说,看起来像这样的东西: 回答了一个类似的问题,但我希望有更好的方法避免硬编码轴标签 数据帧的R代码如下所示: set.seed(100) df = data.frame( Year = rep(c(rep(2013, 12), rep(2014, 9)), 2) , Month = rep(rep(month.abb, 2)[1:21], 2)

我正在尝试将月份和年份作为子组绘制到带有ggplot2的图表中。也就是说,看起来像这样的东西:

回答了一个类似的问题,但我希望有更好的方法避免硬编码轴标签

数据帧的R代码如下所示:

set.seed(100)
df = data.frame(       Year = rep(c(rep(2013, 12), rep(2014, 9)), 2)
                ,     Month = rep(rep(month.abb, 2)[1:21], 2)
                , Condition = rep(c("A", "B"), each=21)
                ,     Value = runif(42))
作为奖励,我希望学习如何在不引入新变量的情况下按年度绘制平滑的总计(如果可能的话)。如果我使用
dplyr
总结
年份和月份分组,则不保留月份顺序

请注意,本月从4月开始:

group_by(df, Year, Month) %>% summarise(total = sum(Value)) %>% head
Source: local data frame [6 x 3]
Groups: Year

  Year Month     total
1 2013   Apr 0.4764846
2 2013   Aug 0.9194172
3 2013   Dec 1.2308575
4 2013   Feb 0.7960212
5 2013   Jan 1.0185700
6 2013   Jul 1.6943562
试试这个

df$Month <- factor(df$Month, levels=month.abb)

p <- ggplot(df, aes(Month, Value, colour=Condition, group=Condition))+
  facet_grid(.~Year) + geom_line() + theme_minimal() 

library(gtable)
g <- ggplotGrob(p)
g2 <- g[-3,] %>% 
  gtable_add_rows(heights = g$heights[3], nrow(g)-3) %>%
  gtable_add_grob(g[3,], t = nrow(g)-2, l=1, r=ncol(g))

grid.newpage()
grid.draw(g2)


df$Month
group_by(df,Year,factor(Month,levels=Month.abb))
应该保持订单的有用性,但我将保留此选项,看看其他人是否可以添加替代解决方案。实际上,这并不好,因为没有连接面板之间点的方法