下面是我的数据的简化版本。我想使用带有
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能力。
我们可以使用
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