0

我正在尝试创建一个柱形图,其中有一个变量“Hall”代表他们几个月的总数。我对代码有一些帮助,但我运行了它,它将所有大厅作为堆叠柱形图放在彼此之上,而不是躲避。有任何想法吗?

这是我尝试过的。

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 个大厅,而不是堆叠。我觉得这一定是一个小错误。

4

1 回答 1

1

ggplot需要一个分类变量来躲避。在这里,我添加了group = Halltoaes来告诉它通过大厅值躲避:

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))

在此处输入图像描述

如您所见,我们仍然在 x 轴上得到重叠的标签。您的代码说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...似乎毫无意义。如果我们改为放在Hallx 轴上(并进行一些其他相关的更改,不再需要group,也不需要指定标签,也不position "dodge"需要 . 但我们不需要discretexcontinuous刻度),事情会变得更简单,看起来更好。

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))

在此处输入图像描述

于 2019-03-28T23:35:53.597 回答