在 ggplot R 中的堆叠条形图 returns 错误消息顶部添加文本(样本大小)
Adding text (sample size) on top of stacked bar chart returns error message in ggplot R
当前数字:
期望的效果:
我有一个堆叠条形图,我想在图表顶部添加样本大小,我尝试使用带有以下代码的 geomtext:
Data %>% count(Month, Age) %>%
group_by(Month) %>%
mutate(percent = n/sum(n)*100) %>%
ggplot(aes(Month, percent, fill = as.factor(Age))) +
geom_col(position = "fill") + ylab("") +
geom_text(aes(label = n_month, y = 1.05)) +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("#009E73", "#E69F00", "#0072B2")) +
theme(axis.text = element_text(size = 17),
legend.text = element_text(size = 18),
axis.title.x = element_text(margin = margin(t = 10), size = 16))
这个returns错误,我的理解是因为这个图中其实有34个数据,而我只想让它显示12个数字。现在我只有在只有 12 个数据的情况下才能成功(因此是“预期效果”图)。我应该如何更改我的代码?
Error: Aesthetics must be either length 1 or the same as the data (34): label"
n_month
[1] 18 8 20 18 24 34 32 15 22 26 12 13
抱歉耽搁了。我试图重现您的数据,问题是基础数据。对于您的方法,为您的 geom 设置不同的数据集会更容易。
对于这个例子,我使用的是 nycflights13
数据,它可能与您的数据相似。
这是我的设置:
library(dplyr)
library(ggplot2)
library(nycflights13)
graph_data <- flights %>%
filter(carrier %in% c("UA", "B6", "EV")) %>%
count(carrier, month) %>%
add_count(month, wt = n, name = "n_month") %>%
mutate(percent = n / n_month * 100)
数据看起来像:
# A tibble: 36 × 3
carrier month n n_month percent
<chr> <int> <int> <int> <dbl>
1 B6 1 4427 13235 33.4
2 B6 2 4103 12276 33.4
3 B6 3 4772 14469 33.0
现在我们根据您的 graph_data
.
为 geom_col()
和 geom_text()
提供不同的数据集
ggplot() +
geom_col(
data = graph_data,
aes(x = month, y = percent, fill = as.factor(carrier)),
position = "fill") + ylab("") +
geom_text(
data = distinct(graph_data, month, n_month),
aes(x = month, y = 1.05, label = n_month)) +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("#009E73", "#E69F00", "#0072B2")) +
theme(axis.text = element_text(size = 17),
legend.text = element_text(size = 18),
axis.title.x = element_text(margin = margin(t = 10), size = 16))
我尽量保留你的代码,只是在 geom_
中添加了 data = ...
参数。
输出为:
当前数字:
我有一个堆叠条形图,我想在图表顶部添加样本大小,我尝试使用带有以下代码的 geomtext:
Data %>% count(Month, Age) %>%
group_by(Month) %>%
mutate(percent = n/sum(n)*100) %>%
ggplot(aes(Month, percent, fill = as.factor(Age))) +
geom_col(position = "fill") + ylab("") +
geom_text(aes(label = n_month, y = 1.05)) +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("#009E73", "#E69F00", "#0072B2")) +
theme(axis.text = element_text(size = 17),
legend.text = element_text(size = 18),
axis.title.x = element_text(margin = margin(t = 10), size = 16))
这个returns错误,我的理解是因为这个图中其实有34个数据,而我只想让它显示12个数字。现在我只有在只有 12 个数据的情况下才能成功(因此是“预期效果”图)。我应该如何更改我的代码?
Error: Aesthetics must be either length 1 or the same as the data (34): label"
n_month
[1] 18 8 20 18 24 34 32 15 22 26 12 13
抱歉耽搁了。我试图重现您的数据,问题是基础数据。对于您的方法,为您的 geom 设置不同的数据集会更容易。
对于这个例子,我使用的是 nycflights13
数据,它可能与您的数据相似。
这是我的设置:
library(dplyr)
library(ggplot2)
library(nycflights13)
graph_data <- flights %>%
filter(carrier %in% c("UA", "B6", "EV")) %>%
count(carrier, month) %>%
add_count(month, wt = n, name = "n_month") %>%
mutate(percent = n / n_month * 100)
数据看起来像:
# A tibble: 36 × 3
carrier month n n_month percent
<chr> <int> <int> <int> <dbl>
1 B6 1 4427 13235 33.4
2 B6 2 4103 12276 33.4
3 B6 3 4772 14469 33.0
现在我们根据您的 graph_data
.
geom_col()
和 geom_text()
提供不同的数据集
ggplot() +
geom_col(
data = graph_data,
aes(x = month, y = percent, fill = as.factor(carrier)),
position = "fill") + ylab("") +
geom_text(
data = distinct(graph_data, month, n_month),
aes(x = month, y = 1.05, label = n_month)) +
scale_y_continuous(labels = scales::percent) +
scale_fill_manual(values = c("#009E73", "#E69F00", "#0072B2")) +
theme(axis.text = element_text(size = 17),
legend.text = element_text(size = 18),
axis.title.x = element_text(margin = margin(t = 10), size = 16))
我尽量保留你的代码,只是在 geom_
中添加了 data = ...
参数。
输出为: