當前圖:
預期效果:
我有一個堆積條形圖,我想在圖表頂部添加樣本大小,我嘗試使用 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))
這會回傳一個錯誤,我理解這是因為這個圖中實際上有 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
uj5u.com熱心網友回復:
抱歉耽擱了。我試圖重現您的資料,問題是基礎資料。對于您的方法,為您的 geoms 提供不同的資料集會更容易。
對于此示例,我使用的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
現在我們根據您geom_col()的.geom_text()graph_data
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))
我試圖盡可能地保留您的代碼,只是在s.中添加了data = ...引數。geom_
輸出是:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471595.html
