Добавление пропорций к гистограмме - PullRequest
1 голос
/ 20 апреля 2020

Я использовал свой df для создания заполненной гистограммы (код используется ниже). Я хочу, чтобы пропорции каждой «расы» были напечатаны на гистограмме.

Demo_17 <- tidyr::pivot_longer(Race_17, -c("State",), names_to = "Race", values_to = "num") %>% 
  ggplot(aes(x=State, y=num, fill = Race)) + 
  geom_bar(position="fill", stat="identity")

  Demo_17 + 
  labs(x = "Population", y = "State", title = "US State Demographics 2017")

Это значение, которое я использую: Демография США c Данные

Я смотрел на другие подобные вопросы, но код длинный и трудный для исполнения, особенно если он не относится к вашим собственным данным.

Может ли кто-нибудь привести меня в правильном направлении?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Попробуйте это. Просто рассчитайте акции, прежде чем строить. Используйте scales::percent для удобного форматирования:

Demo_17 <- tidyr::pivot_longer(Race_17, -c("State",), names_to = "Race", values_to = "num") %>% 
  # compute pct share of race by state
  group_by(State) %>% 
  mutate(pct = num / sum(num)) %>% 
  ggplot(aes(x=State, y=num, fill = Race)) + 
  geom_bar(position="fill", stat="identity") +
  geom_text(aes(label = scales::percent(pct)), position = "fill")

Demo_17 + labs(x = "Population",
               y = "State",
               title = "US State Demographics 2017")

Пример такого подхода с использованием mtcars:

library(ggplot2)
library(dplyr)

mtcars %>% 
  count(cyl, gear, name = "num") %>% 
  group_by(cyl) %>% 
  mutate(pct = num / sum(num)) %>% 
  ggplot(aes(x=cyl, y=num, fill = gear)) + 
  geom_bar(position="fill", stat="identity") +
  geom_text(aes(label = scales::percent(pct)), position = "fill", vjust = 1.5, color = "white")

Создано в 2020-04-20 по представьте пакет (v0.3.0)

ДОПОЛНИТЕЛЬНО: Если вы предпочитаете показывать метку только для акций более 10% (просто пример, отрегулируйте по желанию), затем вы добавляете ifelse() в аргумент label geom_text:

mtcars %>% 
  count(cyl, gear, name = "num") %>% 
  group_by(cyl) %>% 
  mutate(pct = num / sum(num)) %>% 
  ggplot(aes(x=cyl, y=num, fill = gear)) + 
  geom_bar(position="fill", stat="identity") +
  geom_text(aes(label = ifelse(pct>0.10, scales::percent(pct), "")), position = "fill", vjust = 1.5, color = "white")

enter image description here

Как вы заметили, ярлык 9% больше не отображается.

1 голос
/ 20 апреля 2020

Что добавляет метки к вашим диаграммам, так это geom_text(). Может быть, что-то вроде этого:

Demo_17 <- tidyr::pivot_longer(Race_17, -c("State",), names_to = "Race", values_to = "num") %>% 
  ggplot(aes(x=State, y=num, fill = Race)) + 
  geom_bar(position="fill", stat="identity")

  Demo_17 + 
  labs(x = "Population", y = "State", title = "US State Demographics 2017") +
  geom_text(aes(y=num, x=State, labels=num), vjust=0.5)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...