我想在 ggplot 中对箱线图进行分组,并同时绘制主题行(在每个条件组之间)。我找到了执行此操作的解决方案,但仅适用于两个分组,而且当我使用 geom_line 时,会添加不必要的垂直线。 背景:我正在显示 EEG 数据的不同预处理步骤(Opticat、Taper)的结果,以及所有这些针对两种实验条件(对比度)的结果。
我最初的计划是像这样绘制数据,然后在所有分组的对比(绿色和橙色箱线图)之间添加主题线:
ggplot(table,
aes(x = Contrast2,
y = Frequency)) +
geom_boxplot(width = 0.5, aes(fill = factor(Contrast))) +
facet_grid(~TaperType) +
scale_fill_brewer(palette = "Set2") +
theme_classic() +
theme(plot.title = element_text(hjust = 0.5, vjust = 1), axis.ticks.x = element_blank()) +
geom_line(aes(group = as.numeric(Subject)), color = "grey") +
ggtitle("Peak frequency by contrast condition")
我按照here的说明添加行并相应地更改了我的代码。不幸的是,这是为两个分组设计的,所以我丢失了“Opticat”的附加分组。此外,geom_line 不仅应用于整个组,还应用于对比组本身(因此,出现奇怪的灰色垂直线)。
ggplot(table,
aes(x = Opticat,
y = Frequency,
fill = Contrast)) +
geom_boxplot(width = 0.5) +
facet_grid(~TaperType) +
scale_fill_brewer(palette = "Set2") +
theme_classic() +
theme(plot.title = element_text(hjust = 0.5, vjust = 1), axis.ticks.x = element_blank()) +
ggtitle("Peak frequency by contrast condition")
显然,这可能是因为我没有指定正确应用线条的组(参见此处),但我无法在网上找到特定于我的分组星座的解决方案。
任何人都可以帮助解决这些问题吗?或者最多两者兼而有之?
类似的数据可以这样生成:
OPTICAT = c(rep("Yes", 20), rep("No", 20))
Tapers = c(rep(c(rep("Singletaper", 10), rep("Multitaper", 10)),2))
Contr = c(rep(c(rep("low", 5), rep("high", 5)),4))
subject = c(rep(1:10, 4))
table <- data.frame(Subject = subject,
Opticat = OPTICAT,
TaperType = Tapers,
Contrast = Contr,
Frequency = runif(n = 40, min = 35, max = 70))
更新
我尝试为每个 geom_ 元素指定
aes()
,具体来说,但这不起作用:
ggplot(table) +
geom_boxplot(width = 0.5,
aes(x = Opticat,
y = Frequency,
fill = Contrast)) +
geom_line(color = "grey",
aes(x = Contrast,
y = Frequency,
group = as.numeric(Subject))) +
geom_point(position = position_jitterdodge(),
size = 0.5,
aes(x = Opticat,
y = Frequency,
fill = Contrast,
group = Contrast)) +
facet_grid(~TaperType) +
scale_fill_brewer(palette = "Set2") +
theme_classic() +
theme(plot.title = element_text(hjust = 0.5, vjust = 1), axis.ticks.x = element_blank()) +
ggtitle("Peak frequency by contrast condition")
我将其发布为答案,因为评论太长,但我仍在尝试找出最终目标。我认为您需要返回数据,因为您试图在 x 轴上排列不相等的因素。
# First combine your grouping variables
t3 <- table %>%
mutate(groups=stringr::str_c(Opticat,Contrast))
ggplot(t3) +
geom_boxplot(width = 0.5,
aes(x = groups,
y = Frequency,
fill = Contrast)) +
facet_grid(~TaperType) +
geom_line(color = "grey",
aes(x = groups,
y = Frequency,
group = as.numeric(Subject)))
从那里您可以将 x 轴标签更新得更漂亮。