Я хочу добавить процент подсчета для каждой категории в качестве метки на мою круговую диаграмму ggplot

1

Я использую код:

age_pie_chart <- ggplot(data = data , aes(x = "", fill = `Q1: How old are you?`))+
  geom_bar(position = "fill", width = 1) + 
  coord_polar(theta = "y") + xlab("") + ylab("") +  blank_theme + scale_fill_grey()+
  theme(axis.text.x=element_blank())
age_pie_chart

Я хочу, чтобы процент каждой категории был добавлен в диаграмму. из поиска я понимаю, что мне нужно использовать функцию geom_text, но перед этим мне нужно построить частотную таблицу с процентным соотношением количества каждой категории.

Изображение 8846

  • 1
    Отвечает ли это на ваш вопрос? ggplot2 положение geom_text на круговой диаграмме
  • 0
    Для построения частотной таблицы будет лучше, если вы сможете предоставить воспроизводимые данные. с помощью dput образец данных, над которыми вы работаете.
Теги:
ggplot2 pie-chart
CodeFix

1 ответ

2

Вот пример с фиктивными данными. Во-первых, это фиктивные данные. я используюsample() для выбора значений, а затем я гарантирую, что у нас есть «маленький» фрагмент, добавляя только 2 значения дляQ1 = "-15" .

set.seed(1234)
data <- data.frame(
  Q1 = c(sample(c('15-7','18-20','21-25'), 98, replace=TRUE), rep('-15', 2))
)

Что касается сюжета, он в основном такой же, как и ваш сюжет, хотя вам не нужноwidth аргумент в пользуgeom_bar() .

Чтобы правильно расположить текст, вы захотите использоватьgeom_text() . Вы можете рассчитать частоту перед построением графика, или вы могли быggplot рассчитать это на лету так же, как это было дляgeom_bar используяstat="count" для тебяgeom_text() слой.

библиотека (ggplot2)

ggplot(data=data, aes(x="", fill=Q1)) +
  geom_bar(position="fill") +
  geom_text(
    stat='count', 
    aes(y=after_stat(..count..),
        label=after_stat(scales::percent(..count../sum(..count..),1))),
    position=position_fill(0.5),
  ) +
  coord_polar(theta="y") +
  labs(x=NULL, y=NULL) +
  scale_fill_brewer(palette="Pastel1") +
  theme_void()

Изображение 291469

Чтобы было понятно, что происходит в этомgeom_text() линия:

  • я используюstat="count" . Мы хотим получить доступ к этой статистике подсчета на графике, поэтому нам нужно указать, чтобы использовать эту специальную статистическую функцию.

  • Мы используем..count.. в рамках эстетики. Ключевым моментом здесь является то, что для доступа к..count.. value, нам нужна функция stat для вычисления в первую очередь. Вы можете использоватьafter_stat() функция, чтобы указать, что функция stat должна выполняться первой перед отображением эстетики - это открывает..count.. до использования для использования вaes() !

  • Расчет процента для метки. Это происходит через..count../sum(..count..) . я используюscales::percent() как способ отформатировать метку в процентах.

  • Позиция = заливка . Как и в случае с геометрией стержня, нам также необходимо использоватьposition="fill" . Вам необходимо указать, чтобы использовать фактическиеposition_fill() метод, поскольку он позволяет нам получить доступ кvjust аргумент. Это помещает каждое текстовое значение в «середину» каждого фрагмента. Если вы просто установитеposition="fill" , вы размещаете текст на краю каждого фрагмента.

Поделиться
Источник
  • 0
    Большое спасибо за ответ на мой вопрос, я попробовал код, и он сработал: D

Другие вопросы

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум