Как сортировать стеки в гранях каждого ggplot? - PullRequest
2 голосов
/ 17 марта 2020

Пожалуйста, помогите нам отсортировать стеки в порядке возрастания! то есть левая сторона, кажется, в порядке, но правая сторона на самом деле не отсортирована, потому что 1.7 должен был прийти в правом конце. (см. скриншот)

похожие, но не точные запросы Как управлять упорядочением столбчатой ​​диаграммы с накоплением с использованием идентификатора на ggplot2 Порядок составной гистограммы в перегруппировке ggplot каждый фасет по возрастанию для столбчатой ​​диаграммы с накоплением ggplot

df = data.frame(cat = c(rep("A",9),rep("B",11)),
                grp = c(rep("C",3),rep("D",3),rep("F",3), rep("C",3),rep("D",3),rep("E",2),rep("F",3)),
                yrs = c(rep(c("2017","2018","2019"),5),"2017","2019","2017","2018","2019"),
                per = c(2.4,2.5,3.2,
                15.3,17,16.7,
                82.4,80.5,80.1,
                8.6,9.6,15.2,
                36.2,42.2,40.4,
                1.7,1.1,53.4,
                48.2,43.4))

df %>% 
  ggplot(aes(x = "scale",y = per, fill = grp)) +
  # geom_bar(stat="identity") +
  geom_col() +
  geom_text(aes(label= round(per,1)), 
            position=position_stack(vjust=0.5), size= 3) +
  facet_grid(vars(yrs),vars(cat)) +
  coord_flip() +
  theme_bw() +
  xlab("") +
  ylab("") +
  ggtitle("How to sort ") +
  theme(legend.position="bottom",
        legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5),
        axis.text = element_blank(),
        axis.ticks = element_blank())

ets

1 Ответ

1 голос
/ 18 марта 2020

По умолчанию столбцы расположены в алфавитном порядке согласно grp. Для заказа по per мы можем добиться этого для вашего случая, изменив порядок grp, используя, например, fct_reorder из forcats. Однако обратите внимание, что с фасетами это простое решение не будет работать для более общих случаев.

library(ggplot2)
library(dplyr)
library(forcats)

df <- data.frame(cat = c(rep("A",9),rep("B",11)),
               grp = c(rep("C",3),rep("D",3),rep("F",3), rep("C",3),rep("D",3),rep("E",2),rep("F",3)),
               yrs = c(rep(c("2017","2018","2019"),5),"2017","2019","2017","2018","2019"),
               per = c(2.4,2.5,3.2,
                       15.3,17,16.7,
                       82.4,80.5,80.1,
                       8.6,9.6,15.2,
                       36.2,42.2,40.4,
                       1.7,1.1,53.4,
                       48.2,43.4))

df %>% 
  ggplot(aes(x = "scale", y = per, fill = fct_reorder(grp, per))) +
  # geom_bar(stat="identity") +
  geom_col() +
  geom_text(aes(label= round(per,1)), 
            position=position_stack(vjust=0.5), size= 3) +
  facet_grid(vars(yrs),vars(cat)) +
  coord_flip() +
  theme_bw() +
  xlab("") +
  ylab("") +
  ggtitle("How to sort ") +
  theme(legend.position="bottom",
        legend.title = element_blank(),
        plot.title = element_text(hjust = 0.5),
        axis.text = element_blank(),
        axis.ticks = element_blank())

Создано в 2020-03-17 с помощью представ пакет (v0.3.0)

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