如何按升序排列堆叠的 geom_bar

时间:2020-12-28 16:41:22

标签: r ggplot2 dplyr tidyverse geom-bar

我正在查看 R 整洁的星期二数据集(欧洲能源)。我已经将导入和导出作为比例进行了讨论,并且希望通过导入值的上升来安排 ggplot。只是想让它看起来整洁,但似乎无法控制顺序来查看每个具有下一个最大进口值的国家。

我在代码中进行了几次尝试,但已注释掉。提前谢谢。

library(tidyverse)

country_totals <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-08-04/country_totals.csv')


country_totals %>% 
  filter(!is.na(country_name)) %>% 
  filter(type %in% c("Imports","Exports")) %>% 
  group_by(country_name) %>% 
  mutate(country_type_ttl = sum(`2018`)) %>% 
  mutate(country_type_pct = `2018`/country_type_ttl) %>% 
  ungroup() %>% 
  mutate(type_hold = type) %>%
  pivot_wider(names_from = type_hold, values_from = `2018`) %>% 
  # ggplot(aes(country_name, country_type_pct, fill = type)) +
  # ggplot(aes(reorder(country_name, Imports), country_type_pct, fill = type)) +
  ggplot(aes(fct_reorder(country_name, Imports), country_type_pct, fill = type)) +
  geom_bar(stat = "identity") +
  coord_flip()

1 个答案:

答案 0 :(得分:2)

这可以通过添加一个列来实现,该列包含您想要重新排序的值,即 2018 年进口的百分比份额,例如使用imports_2018 = country_type_pct[type == "Imports"]。然后根据此列对计数器重新排序:

`

library(tidyverse)

country_totals <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-08-04/country_totals.csv')

country_totals %>% 
  filter(!is.na(country_name)) %>% 
  filter(type %in% c("Imports","Exports")) %>% 
  group_by(country_name) %>% 
  mutate(country_type_ttl = sum(`2018`)) %>% 
  mutate(country_type_pct = `2018`/country_type_ttl,
         imports_2018 = country_type_pct[type == "Imports"]) %>% 
  ungroup() %>% 
  mutate(type_hold = type) %>%
  ggplot(aes(fct_reorder(country_name, imports_2018), country_type_pct, fill = type)) +
  geom_bar(stat = "identity") +
  coord_flip()
#> Warning: Removed 2 rows containing missing values (position_stack).