Столбчатая диаграмма с накоплением появляется вместо уклонения с помощью ggplot - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь создать столбчатую диаграмму, в которой переменная «Холл» представлена ​​для их итогов по месяцам.У меня была некоторая помощь с кодом, но я запустил его, он помещает все залы на вершине друг друга как столбчатую диаграмму с накоплением, а не как уклоненный.Есть идеи?

Вот что я попробовал.

library(tidyverse)
fall2 <- structure(list(Hall = c("1959E", "1959E", "1959E", "1959E", "1959E", 
 "2109 F", "2109 F", "2109 F", "2109 F", "2109 F"), Month = c("August", 
 "December", "November", "October", "September", "August", "December", 
 "November", "October", "September"), total = c(2, 4, 5, 11, 8, 
 1, 3, 8, 7, 4)), row.names = c(NA, -10L), class = c("grouped_df", 
 "tbl_df", "tbl", "data.frame"), vars = "Hall", drop = TRUE, indices = list(
 0:4, 5:9), group_sizes = c(5L, 5L), biggest_group_size = 5L, labels =
 structure(list(Hall = c("1959E", "2109 F")), row.names = c(NA, -2L), 
 class = "data.frame", vars = "Hall", drop = TRUE))

fall2$Month <- fall2$Month %>% 
  fct_relevel("August", "September", "October", "November", "December")

fall2 <- fall2 %>%
  arrange(Month, -total) %>%
  mutate(order = row_number())

#something like this?
ggplot(fall2, aes(order, total)) + 
  geom_col(aes(fill = total), position = "dodge") +
  guides(fill=FALSE) + 
  ggtitle("Fall Events by Hall") +
  facet_wrap(~Month, nrow = 1, scales = "free_x") +
  scale_x_continuous(breaks = fall2$order, labels = fall2$Hall,expand = c(0,0))

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

1 Ответ

1 голос
/ 29 марта 2019

ggplot нужна категориальная переменная, чтобы увернуться. Здесь я добавил group = Hall к aes, чтобы сказать ему уклоняться от значения зала:

ggplot(fall2, aes(order, total)) + 
  geom_col(aes(fill = total, group = Hall), position = "dodge") +
  guides(fill=FALSE) + 
  ggtitle("Fall Events by Hall") +
  facet_wrap(~Month, nrow = 1, scales = "free_x") +
  scale_x_continuous(breaks = fall2$order, labels = fall2$Hall,expand = c(0,0))

enter image description here

Как видите, у нас все еще есть перекрывающиеся метки на оси х. В вашем коде написано breaks = fall2$order, labels = fall2$Hall, при этом метки оси X имеют уникальные значения order и помечают их соответствующими значениями Hall. Глядя на ваши данные:

fall2
# A tibble: 10 x 4
# Groups:   Hall [2]
   Hall   Month     total order
   <chr>  <fct>     <dbl> <int>
 1 1959E  August        2     1
 2 2109 F August        1     1
 3 1959E  September     8     2
 4 2109 F September     4     2
 ...

Мы можем видеть, что каждое значение order имеет несколько значений Hall, поэтому ggplot делает именно то, о чем вы его просили. На order = 1 мы получаем соответствующие Hall метки: "1959E" и 2109 F (строки 1 и 2).

Я не совсем уверен, почему вы используете order вообще ... кажется бессмысленным. Если вместо этого мы поместим Hall на ось x (и сделаем некоторые другие связанные изменения, больше не нужно ни group, ни указание меток, ни position "dodge". Но нам нужно discrete, а не continuous x масштаб), все становится проще и выглядит лучше.

ggplot(fall2, aes(Hall, total)) + 
  geom_col(aes(fill = total), width = 1) +
  guides(fill=FALSE) + 
  ggtitle("Fall Events by Hall") +
  facet_wrap(~Month, nrow = 1, scales = "free_x") +
  scale_x_discrete(expand = c(0,0))

enter image description here

...