Как добавить процентные метки в круговую диаграмму на основе факторов в ggplot2
Я довольно новичок в ggplot, так что это, вероятно, очень простой вопрос, но я просто не могу его решить. Я использую ggplot для построения круговой диаграммы на основе факторной переменной во фрейме данных. переменные уровни - "F" и "M".
hcgen <- ggplot(hc, aes(x = factor(1), fill = gender))
Затем я использую пустую тему для визуализации графика
hcgen + geom_bar(width = 1) + coord_polar("y") + blank_theme + theme(axis.text.x=element_blank())
Я использовал разные опции для добавления ярлыков, но ничего не работает. Я использовал например:
geom_text(aes(y = value/3 + c(0, cumsum(value)[-length(value)]), + label = percent(value/100)), size=5)
но это дает следующую ошибку
Error in FUN(X[[i]], ...) : object 'value' not found
Что я делаю неправильно?
1 ответ
Похоже, что вы копируете и вставляете код, где вы не знаете данных, в данном случае код, с которым вы работаете, такой:
library(ggplot2)
library(scales)
df <- data.frame(
group = c("Male", "Female", "Child"),
value = c(25, 25, 50))
bp <- ggplot(df, aes(x="", y=value, fill=group))+
geom_bar(width = 1, stat = "identity")
pie <- bp + coord_polar("y", start=0)
blank_theme <- theme_minimal()+
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.border = element_blank(),
panel.grid=element_blank(),
axis.ticks = element_blank(),
plot.title=element_text(size=14, face="bold")
)
pie + scale_fill_brewer("Blues") + blank_theme +
theme(axis.text.x=element_blank())+
geom_text(aes(y = value/3 + c(0, cumsum(value)[-length(value)]),
label = percent(value/100)), size=5)
Добавление dplyr и некоторых обновлений ggplot2, конечно, может упростить его:
library(dplyr)
library(ggplot2)
library(scales)
df <- data.frame(
group = c("Male", "Female", "Child"),
value = c(25, 25, 50))
df %>%
ggplot(aes(x="", y=value, fill=group)) +
geom_col() +
geom_text(aes(label = percent(value/100)), position = position_stack(vjust = 0.5)) +
scale_fill_brewer(palette = "Blues") +
coord_polar("y") +
theme_void() +
labs(title = "TITLE",
fill = "LEGEND")