一起使用facet_grid和facet_wrap

时间:2013-11-22 17:05:26

标签: r ggplot2 facet

我尝试使用facet_wrap创建一个图表,并在每个包装的方面内部设置facet_grid,但我无法做到。有什么建议吗?

例如,如果我按月平均2个数量进行逐年比较,我希望 -

  • 2个方面,每个数量一个,
  • 每个月中,5个数量小平面中的每个小平面都有12个小平面
  • 每个月的每个方面都有两个方面

我能来的最近的就是这个,

library(ggplot2)

# create dataset
df <- data.frame(
  Facet1 = rep(c(1,2,3),24),
  Facet2 = c(rep(1,24),rep(2,24)),
  Year = rep(c(rep(2012,12),rep(2013,12)),2),
  Month = rep(rep(1:12,2),2),
  ValueX = sample(0:5,144,replace = TRUE),
  ValueY = sample(0:5,144,replace = TRUE)
)

df <- df[!(df$Facet1 == 2 & df$Facet2 == 2),]

ggplot(df, aes(ValueX, ValueY)) + geom_point() +
    facet_grid(Facet2 + Year ~ Month)

enter image description here

虽然,我理想的是,这是与此类似的东西(在我看来,类似于ggplot() ... + facet_grid(Year ~ Month) + facet_wrap(Facet2~.)) -

enter image description here

PS:我认为后者的各个方面更容易区分,更容易通过。评论?任何替代方案?

3 个答案:

答案 0 :(得分:1)

也许我误解了你想要做的事,但这不能实现你想要的吗?

ggplot(df, aes(ValueX, ValueY)) + geom_point() +
  facet_grid(Facet2 ~ Facet1)

如果您想更改构面标题以匹配您的示例,请查看labeller的{​​{1}}参数。

答案 1 :(得分:0)

我不确定你想要做什么,但我觉得在这里使用格子更容易得到你想要的东西:

library(latticeExtra)
xyplot(ValueY~ValueX|Facet1+Facet2,data=df, 
             between=list(x=2,y=0),
    par.settings = ggplot2like(),axis=axis.grid)

enter image description here

答案 2 :(得分:0)

此解决方案不是很好,但是可以使用cowplot完成:

plot1<-ggplot(df[df$Facet2==1,], aes(ValueX, ValueY)) + geom_point() +
  facet_grid(Year ~ Month)+
  theme_bw()

plot2<-ggplot(df[df$Facet2==2,], aes(ValueX, ValueY)) + geom_point() +
  facet_grid(Year ~ Month)+
  theme_bw()

plot_grid(plot1, plot2, labels = c("1", "2"), nrow = 2)

enter image description here