Как построить сравнение разных месяцев в r - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь показать рост новых соискателей за месяцы коронавируса. Итак, я отфильтровал таблицу с нужной мне статистикой из полного df и назвал ее dist.newseek

 Cdata <- structure(list(Month = c(
  "2020-01", "2020-01", "2020-01", "2020-01",
  "2020-01", "2020-02", "2020-02", "2020-02", "2020-02", "2020-02",
  "2020-03", "2020-03", "2020-03", "2020-03", "2020-03", "2020-04",
  "2020-04", "2020-04", "2020-04", "2020-04"
), District = c(
  "Dan",
  "Jerusalem", "North", "Sharon", "South", "Dan", "Jerusalem",
  "North", "Sharon", "South", "Dan", "Jerusalem", "North", "Sharon",
  "South", "Dan", "Jerusalem", "North", "Sharon", "South"
), NewSeekers = c(
  6551L,
  3589L, 6154L, 4131L, 4469L, 5529L, 2721L, 5061L, 3464L, 3612L,
  231315L, 137479L, 159445L, 123753L, 104868L, 55038L, 33995L,
  40572L, 31373L, 23914L
)), row.names = c(NA, -20L), class = "data.frame")

И я пытаюсь найти лучший способ показать рост NewSeekers в период с января по апрель. Если у вас есть другие предложения по сюжету, я возьму его

Что касается проблемы, я использовал ggplot с geom_text, но круг не полный, а текст вообще не ясен

Вот код, который я использовал:

dist.newseek <- Cdata %>% 
  group_by(Month,District) %>% 
  summarise(NewSeekers=sum(NewSeekers))


ggplot(dist.newseek, aes(x="", y=NewSeekers, group=District, color=District, fill=District)) +
  geom_bar(width = 1, stat = "identity") +
  geom_text(aes(label = paste0(NewSeekers,
                               " (",
                               scales::percent(NewSeekers / sum(NewSeekers)),
                               ")")),
            position = position_stack(vjust = 0.5)) +
  coord_polar("y", start=0) + facet_wrap(~ Month) +
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid  = element_blank())

И график:

Pie chart example

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Думаю, вы хотите, чтобы проценты рассчитывались в пределах каждого месяца. Тогда вы, вероятно, захотите сгруппировать по месяцам и подвести итоги.

group_by(dist.newseek, Month) %>%
  mutate(percent=NewSeekers / sum(NewSeekers)) %>%
  ggplot(aes(x="", y=percent, fill=District)) +
  geom_bar(stat = "identity") +
  facet_wrap(~ Month, ncol=3) +
  coord_polar("y", start=0) + 
  geom_text(aes(label = paste0(NewSeekers,
                             "\n (",
                             scales::percent(percent, accuracy=1),
                             ")")),
          position = position_stack(vjust = 0.5), size=1.5) +
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid  = element_blank(),
        text=element_text(size=10),
        legend.position = c(0.7, 0.3)) +
  labs(x="", y="") +
  guides(fill=guide_legend(ncol=2))

enter image description here

1 голос
/ 17 июня 2020

Попробуйте это. Проблема в том, что вы отображаете количество соискателей на y, а не на проценты. Просто вычислите проценты и отобразите их на y:

library(dplyr)
library(ggplot2)

dist.newseek <- Cdata %>% 
  group_by(Month,District) %>% 
  summarise(NewSeekers = sum(NewSeekers)) %>% 
  # Compute percentages
  mutate(NewSeekersPct = NewSeekers / sum(NewSeekers))
#> `summarise()` regrouping output by 'Month' (override with `.groups` argument)

ggplot(dist.newseek, aes(x="", y=NewSeekersPct, group=District, color=District, fill=District)) +
  geom_bar(width = 1, stat = "identity") +
  geom_text(aes(label = paste0(NewSeekers,
                               "\n(",
                               # Use the computed pct
                               scales::percent(NewSeekersPct, accuracy = .1),
                               ")")),
            position = position_stack(vjust = 0.5), color = "white") +
  coord_polar("y", start=0) + 
  facet_wrap(~ Month) +
  theme(axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid  = element_blank())

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