How to sort stacks within facets ?

Please help us sort the stacks in ascending order !
i.e. left facet seems to be in order but right side is not really sorted because 1.7 should have come at the right end. (please refer screenshot)

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

If you try converting yrs to numbers, does that help?

@dromano, thanks for suggestion.

turning into integer didnt change anything

 yrs = c(rep(c("2017","2018","2019"),5),"2017","2019","2017","2018","2019") %>% as.integer()

Is this what you mean?

library(tidyverse)

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 = reorder(grp, per))) +
    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())

1 Like

exactly, thanks for quick solution

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.