如何创建具有水平和垂直多个嵌套面的图形?

问题描述 投票:0回答:1

下面是我的数据的简化版本。我想使用带有

ggplot() + geom_bar
的垂直条来绘制平均值。有几件事我想做。

  • 我想根据Vfront(所有“前”数据在左侧,所有“后”数据在右侧)垂直分组数据(=并排/彼此相邻/按列)分离数据。

  • 我还想根据方式将数据水平分组(彼此顶部/行中)分离数据(所有“Stop”都在顶行,所有“Fric”都在底行)。

  • 此外,我希望根据目标对不同的 MedDors 进行分组(按 NA、cor、incor、X 顺序)。

Target  Manner  Vfront  MedDor  Mean
p       Stop    front   NA      0.60
p       Stop    back    NA      0.59
p       Stop    front   cor     0.58
p       Stop    back    cor     0.56
p       Stop    front   incor   0.52
p       Stop    back    incor   0.52
p       Stop    front   X       0.24
p       Stop    back    X       0.52
b       Stop    front   NA      0.42
b       Stop    back    NA      0.39
b       Stop    front   cor     0.37
b       Stop    back    cor     0.42
b       Stop    front   incor   0.36
b       Stop    back    incor   0.33
b       Stop    front   X       0.14
b       Stop    back    X       0.39
f       Fric    front   NA      0.27
f       Fric    back    NA      0.23
f       Fric    front   cor     0.19
f       Fric    back    cor     0.40
f       Fric    front   incor   0.13
f       Fric    back    incor   0.32
f       Fric    front   X       0.08
f       Fric    back    X       0.13
v       Fric    front   NA      0.24
v       Fric    back    NA      0.18
v       Fric    front   cor     0.17
v       Fric    back    cor     0.11
v       Fric    front   incor   0.25
v       Fric    back    incor   0.16
v       Fric    front   X       0.09
v       Fric    back    X       0.16

所以总的来说,我应该得到与下面的分组数据类似的东西:

                         Front                              Back
pNA pcor pincor cX bNA bcor bincor bX pNA pcor pincor cX bNA bcor bincor bX
         p                    b                    p                    b 
fNA fcor fincor fX vNA vcor vincor vX fNA fcor fincor fX vNA vcor vincor vX
         f                    v                    f                    v

我可以对数据进行一些基本的过滤,并分解以获得某些订单,并且我知道

facet_grid(~Vfront)
根据
Vfront
值(基于我的数据)为我提供不同的列,但我要问的划分超出了我当前的R能力。

r ggplot2 nested facet geom-bar
1个回答
0
投票

我们可以使用

ggh4x::facet_nested
作为您想要的嵌套面。如果您想要一定顺序的面,您需要使用您想要的
factor
创建
levels
列;然而,
NA
总是最后一个,所以我们需要将
NA
转换为
"NA"

library(ggplot2)
library(ggh4x)
library(dplyr)
library(tidyr)

df1 %>% 
  mutate(MedDor_f = factor(replace_na(MedDor, "NA") , 
                           levels = c("NA", "cor", "incor", "X")),
         Manner_f = factor(Manner, levels = c("Stop", "Fric")), 
         Vfront_f = factor(Vfront, levels = c("front", "back"))) %>% 
 ggplot(aes(x = Target, y = Mean)) +
  geom_bar(stat = "identity") +
  facet_nested(rows = vars(Manner_f), cols = vars(Vfront_f, MedDor_f))

创建于 2024-02-06,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.