如何在不同 geom_col 图的恒定垂直位置注释文本
How to annotate text in a constant vertical place of different geom_col plots
我需要编写一个函数,为具有不同列数的不同数据生成 geom_plot
。我需要在绘图的固定位置添加文本注释,无论它有多少列。它总是在 y = 1.02
上,我希望它总是右对齐。我对单个图的尝试如下:
mtcars %>%
mutate(gear = as.factor(as.character(gear))) %>%
group_by(gear) %>% summarise(qsec = sum(qsec)) %>%
mutate(qsec_index = qsec / mean(qsec)) %>%
ggplot() +
geom_col(aes(gear, qsec_index)) +
geom_hline(aes(yintercept = 1)) +
geom_text(aes(x = 3.4, y = 1.02, label = 'Average'))
但是,无论我的基础数据是否有 2、4、5 等列,我如何才能使其始终右对齐?
您可以根据 x 变量的级别数放置注释。这里我们将使用 carb
而不是 gear
来演示:
mtcars %>%
mutate(carb = as.factor(as.character(carb))) %>%
group_by(carb) %>% summarise(qsec = sum(qsec)) %>%
mutate(qsec_index = qsec / mean(qsec)) %>%
ggplot() +
geom_col(aes(carb, qsec_index)) +
geom_hline(aes(yintercept = 1)) +
geom_text(aes(x = length(levels(carb)) + .4, y = 1.02, label = 'Average'),
hjust = 1, vjust = -1)
并且它仍将按预期使用 gear
:
mtcars %>%
mutate(gear = as.factor(as.character(gear))) %>%
group_by(gear) %>% summarise(qsec = sum(qsec)) %>%
mutate(qsec_index = qsec / mean(qsec)) %>%
ggplot() +
geom_col(aes(gear, qsec_index)) +
geom_hline(aes(yintercept = 1)) +
geom_text(aes(x = length(levels(gear)) + .4, y = 1.02, label = 'Average'),
hjust = 1, vjust = -1)
由 reprex package (v0.3.0)
于 2020-04-07 创建
我需要编写一个函数,为具有不同列数的不同数据生成 geom_plot
。我需要在绘图的固定位置添加文本注释,无论它有多少列。它总是在 y = 1.02
上,我希望它总是右对齐。我对单个图的尝试如下:
mtcars %>%
mutate(gear = as.factor(as.character(gear))) %>%
group_by(gear) %>% summarise(qsec = sum(qsec)) %>%
mutate(qsec_index = qsec / mean(qsec)) %>%
ggplot() +
geom_col(aes(gear, qsec_index)) +
geom_hline(aes(yintercept = 1)) +
geom_text(aes(x = 3.4, y = 1.02, label = 'Average'))
您可以根据 x 变量的级别数放置注释。这里我们将使用 carb
而不是 gear
来演示:
mtcars %>%
mutate(carb = as.factor(as.character(carb))) %>%
group_by(carb) %>% summarise(qsec = sum(qsec)) %>%
mutate(qsec_index = qsec / mean(qsec)) %>%
ggplot() +
geom_col(aes(carb, qsec_index)) +
geom_hline(aes(yintercept = 1)) +
geom_text(aes(x = length(levels(carb)) + .4, y = 1.02, label = 'Average'),
hjust = 1, vjust = -1)
并且它仍将按预期使用 gear
:
mtcars %>%
mutate(gear = as.factor(as.character(gear))) %>%
group_by(gear) %>% summarise(qsec = sum(qsec)) %>%
mutate(qsec_index = qsec / mean(qsec)) %>%
ggplot() +
geom_col(aes(gear, qsec_index)) +
geom_hline(aes(yintercept = 1)) +
geom_text(aes(x = length(levels(gear)) + .4, y = 1.02, label = 'Average'),
hjust = 1, vjust = -1)