跨多个方面注释 ggplot2
Annotate ggplot2 across multiple facets
我最近开始使用 ggh4x 包中的 facet_nested 函数,我非常喜欢嵌套轴的外观。我想注释情节以显示我拥有的统计数据 运行。我创建了一个虚拟数据集来说明我的问题。
library(tidyverse)
library(markdown)
library(ggtext)
library(ggh4x)
df <- data.frame(pretreatment = c("10NA", "10NA","10NA", "NT", "NT", "NT"),
timepoint = c("0 h", "6 h","6 h", "0 h", "6 h", "6 h"),
treatment = c("baseline", "10NA", "NT","baseline", "10NA", "NT"),
mean_copy_no = c(1000, 1500, 1200, 600, 700, 400),
sample_id = c(1, 2, 3, 4, 5, 6))
df %>%
ggplot(aes(x=sample_id, y = mean_copy_no, fill = treatment)) +
geom_col(colour = "black") +
facet_nested(.~ pretreatment + timepoint + treatment, scales = "free", nest_line = TRUE, switch = "x") +
ylim(0,2000) +
theme_bw() +
theme(strip.text.x = element_text(size = unit(10, "pt")),
legend.position = "none",
axis.title.y = element_markdown(size = unit(13, "pt")),
axis.text.y = element_text(size = 11),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
strip.text = element_markdown(size = unit(12, "pt")),
strip.background = element_blank(),
panel.spacing.x = unit(0.05,"line"),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.border = element_blank())
这会生成以下图。
现在我的问题是,每个条形图都位于其自己的方面内,而不是全部位于一个 x 轴上(如果您 运行 没有主题的代码,它会显示得更清楚)。
我已经画出了我想要的情节。
我想添加线条和星号来表示显着差异。
我可以轻松地添加星星,但是我很难添加线条,而且我知道这甚至可能是不可能的,因为我正在使用构面来生成情节。我只是想 post 这个问题,看看是否有人对如何在 R 中做到这一点有任何建议。或者是否有一种方法可以在不使用分面的情况下实现嵌套外观。
*为清晰起见进行了编辑。
一种选择是在创建 ggplot
对象后使用 cowplot
,我们可以在其中添加线条和文本。
library(ggplot2)
library(cowplot)
results <- df %>%
ggplot(aes(x=sample_id, y = mean_copy_no, fill = treatment)) +
geom_col(colour = "black") +
facet_nested(.~ pretreatment + timepoint + treatment, scales = "free", nest_line = TRUE, switch = "x") +
ylim(0,2000) +
theme_bw() +
theme(strip.text.x = element_text(size = unit(10, "pt")),
legend.position = "none",
axis.title.y = element_markdown(size = unit(13, "pt")),
axis.text.y = element_text(size = 11),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
strip.text = element_markdown(size = unit(12, "pt")),
strip.background = element_blank(),
panel.spacing.x = unit(0.05,"line"),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.border = element_blank())
ggdraw(results) +
draw_line(
x = c(0.07, 0.36),
y = c(0.84, 0.84),
color = "black", size = 1
) +
annotate("text", x = 0.215, y = 0.85, label = "*", size = 15) +
draw_line(
x = c(0.7, 0.98),
y = c(0.55, 0.55),
color = "black", size = 1
) +
annotate("text", x = 0.84, y = 0.56, label = "**", size = 15)
输出
我最近开始使用 ggh4x 包中的 facet_nested 函数,我非常喜欢嵌套轴的外观。我想注释情节以显示我拥有的统计数据 运行。我创建了一个虚拟数据集来说明我的问题。
library(tidyverse)
library(markdown)
library(ggtext)
library(ggh4x)
df <- data.frame(pretreatment = c("10NA", "10NA","10NA", "NT", "NT", "NT"),
timepoint = c("0 h", "6 h","6 h", "0 h", "6 h", "6 h"),
treatment = c("baseline", "10NA", "NT","baseline", "10NA", "NT"),
mean_copy_no = c(1000, 1500, 1200, 600, 700, 400),
sample_id = c(1, 2, 3, 4, 5, 6))
df %>%
ggplot(aes(x=sample_id, y = mean_copy_no, fill = treatment)) +
geom_col(colour = "black") +
facet_nested(.~ pretreatment + timepoint + treatment, scales = "free", nest_line = TRUE, switch = "x") +
ylim(0,2000) +
theme_bw() +
theme(strip.text.x = element_text(size = unit(10, "pt")),
legend.position = "none",
axis.title.y = element_markdown(size = unit(13, "pt")),
axis.text.y = element_text(size = 11),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
strip.text = element_markdown(size = unit(12, "pt")),
strip.background = element_blank(),
panel.spacing.x = unit(0.05,"line"),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.border = element_blank())
这会生成以下图。
现在我的问题是,每个条形图都位于其自己的方面内,而不是全部位于一个 x 轴上(如果您 运行 没有主题的代码,它会显示得更清楚)。
我已经画出了我想要的情节。
我想添加线条和星号来表示显着差异。
我可以轻松地添加星星,但是我很难添加线条,而且我知道这甚至可能是不可能的,因为我正在使用构面来生成情节。我只是想 post 这个问题,看看是否有人对如何在 R 中做到这一点有任何建议。或者是否有一种方法可以在不使用分面的情况下实现嵌套外观。
*为清晰起见进行了编辑。
一种选择是在创建 ggplot
对象后使用 cowplot
,我们可以在其中添加线条和文本。
library(ggplot2)
library(cowplot)
results <- df %>%
ggplot(aes(x=sample_id, y = mean_copy_no, fill = treatment)) +
geom_col(colour = "black") +
facet_nested(.~ pretreatment + timepoint + treatment, scales = "free", nest_line = TRUE, switch = "x") +
ylim(0,2000) +
theme_bw() +
theme(strip.text.x = element_text(size = unit(10, "pt")),
legend.position = "none",
axis.title.y = element_markdown(size = unit(13, "pt")),
axis.text.y = element_text(size = 11),
axis.text.x = element_blank(),
axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
strip.text = element_markdown(size = unit(12, "pt")),
strip.background = element_blank(),
panel.spacing.x = unit(0.05,"line"),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.border = element_blank())
ggdraw(results) +
draw_line(
x = c(0.07, 0.36),
y = c(0.84, 0.84),
color = "black", size = 1
) +
annotate("text", x = 0.215, y = 0.85, label = "*", size = 15) +
draw_line(
x = c(0.7, 0.98),
y = c(0.55, 0.55),
color = "black", size = 1
) +
annotate("text", x = 0.84, y = 0.56, label = "**", size = 15)
输出