R + ggplot2 => добавить метки на фасетную круговую диаграмму
Я хочу добавить метки данных на граненый пирог char.
Может быть, кто-то может мне помочь.
Мои данные:
year <- c(1,2,1,2,1,2)
prod <- c(1,1,2,2,3,3)
quantity <- c(33,50,33,25,34,25)
df <- data.frame(year, prod, quantity)
rm(year, prod, quantity)
код:
library(ggplot2)
# center calculated by hand
centr2 <- c(16, 25, 49, 62.5, 81, 87.5)
ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) +
geom_bar(stat="identity") +
geom_text(aes(x= factor(1), y=centr2, label = df$quantity), size=10) +
facet_grid(facets = .~year, labeller = label_value) +
coord_polar(theta = "y")
И мой результат:
![pie char]()
Если удалить cop_polar (theta = "y" ), у меня будет следующий график:
![bar plot]()
И теперь для меня ясно, почему мои метки данных не совпадают.
Но я не знаю, как это исправить.
Я читал:
1. Поместите ярлыки на круговую диаграмму
2. Добавить текст в ggplot с фасетными плотностями
3. Участок пирога, получающий текст поверх друг друга
Но не нашел ответа.
Ответы
Ответ 1
Я бы подошел к этому, указав другую переменную (которую я называю pos
) в df
, которая вычисляет положение текстовых меток. Я делаю это с помощью dplyr
, но вы также можете использовать другие методы, конечно.
library(dplyr)
library(ggplot2)
df <- df %>% group_by(year) %>% mutate(pos = cumsum(quantity)- quantity/2)
ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) +
geom_bar(stat="identity") +
geom_text(aes(x= factor(1), y=pos, label = quantity), size=10) + # note y = pos
facet_grid(facets = .~year, labeller = label_value) +
coord_polar(theta = "y")
![pie]()