每个方面线具有不同 y 轴的 ggplot2 方面:如何从 facet_grid 和 facet_wrap 中获取 "best"?

ggplot2 facets with different y axis per facet line: how to get the "best" from both facet_grid and facet_wrap?

上下文: 我有一个数据框,其中记录了两个类别的数字列 Type(下例中的 concuptake ).使用我的真实数据,我需要制作如下所示的多面图。

问题: 设置 scales = "free_y" 不会“释放”同一 线 的小平面的 y 刻度,事实上,当类别 conc 的值远大于类别 uptake 的值时,后者被“压碎”。

问题: 是否可以使用 facet_grid() 或将 facet-label 从 facet_wrap() 更改为同一行的小平面的 y 轴刻度匹配 facet_grid()?

试验和错误: 我试过 facet_wrap() 但我没有达到 facet_grid() 的整洁布局,而 y 轴刻度很好。也许有一种方法可以定义 facet_wrap() facet-labels 但是玩弄 switch (i.e. strip_position) arguments 并没有成功。

我知道一些 SO post 已经在寻找类似的东西(见 )但也许(我希望 ^^)另一个,也许“更简单”的解决方案从那以后出现了。

library(magrittr) # for %>%
library(tidyr) # for pivot longer
library(ggplot2)
df <- CO2 %>% pivot_longer(cols = c("conc", "uptake"))
# nice facet labels but bad y-axis
ggplot(data = df, aes(x = Type, y = value)) +
  geom_boxplot() +
  facet_grid(Treatment ~ name, scales = "free_y")

# nice y-axis but bad facet labels
ggplot(data = df, aes(x = Type, y = value)) +
  geom_boxplot() +
  facet_wrap(Treatment ~ name, scales = "free_y")

reprex package (v2.0.1)

于 2022-03-30 创建

ggh4x::facet_grid2() 函数有一个 independent 参数,您也可以使用该参数在行和列中设置自由比例。免责声明:我是 ggh4x 的作者。

library(magrittr) # for %>%
library(tidyr) # for pivot longer
library(ggplot2)

df <- CO2 %>% pivot_longer(cols = c("conc", "uptake"))

ggplot(data = df, aes(x = Type, y = value)) +
  geom_boxplot() +
  ggh4x::facet_grid2(Treatment ~ name, scales = "free_y", independent = "y")

reprex package (v2.0.1)

于 2022-03-30 创建