Facet_grid 所有面板都带有 free_y

Facet_grid with all panels with a free_y

我有一个 6x6 的网格(站点在侧面,年份在顶部),随时间 (x) 显示丰度 (y)。

我已经使用 facet_grid 构建情节,使用 free_y。这绘制了一个图形,每一行都有一个共享的 y 轴。我需要为所有面板单独设置 free_y,我知道 facet_grid 不允许这样做,而 facet_wrap 允许。我想使用 facet_grid 因为它保持面板的顺序,每年有列,每个站点有行。

我试过使用 lemon 包和 facet_rep_grid 函数,但这没有用。有谁知道我如何 free_y 分别跨越所有面板?

谢谢

一个建议是使用 ggh4x::facet_grid2() 设置独立的 y 尺度。 (免责声明:我是 ggh4x 的作者)。以下标准数据集示例:

library(ggplot2)

ggplot(mpg, aes(displ, hwy, colour = as.factor(cyl))) + 
  geom_point() + 
  ggh4x::facet_grid2(vars(year), vars(drv), 
                     scales = "free_y", independent = "y")

reprex package (v0.3.0)

创建于 2022-03-11

另一种解决方案是 lemon 包中的 facet_rep_grid

示例代码:

   #install.packages("lemon")
library(lemon)
library(ggplot2)

ggplot(df)+
  geom_line(aes(x=time, y=abundance, color=sites))+
  lemon::facet_rep_grid(year~sites, 
                   scales="free",
                   repeat.tick.labels = "all")+
  theme(panel.background = element_blank(), 
        axis.line = element_line(size=0.5))+
  labs(x="Time", y="Abundance", fill="Sites")+
  theme_minimal()

剧情: