Henri
Henri

Reputation: 1235

Having problems with reorder_within (ggplot2)

I have a facet problem. I want to split my data using the 'region' variable in my petty dataset, and reorder by 'andel'. I've tried to use reorder_within (tidytext) and it does order the bars correctly but in every facet I get every tick label I have in the dataset, 18 in total, although I have only six observations per group. What am I missing here?

Help would be very appreciated.

This is my data.

region               FodelseLandNamn             n  andel
 1 Skåne län            Sydost-Asien             2223 0.0954
 2 Skåne län            Södra Europa             3188 0.137 
 3 Skåne län            Södra och Central-Asien  2353 0.101 
 4 Skåne län            Västra Asien             9037 0.388 
 5 Skåne län            Östra Afrika             1148 0.0493
 6 Skåne län            Östra Europa             2017 0.0866
 7 Stockholms län       Syd-Amerika              3391 0.0767
 8 Stockholms län       Sydost-Asien             3275 0.0741
 9 Stockholms län       Södra och Central-Asien  6029 0.136 
10 Stockholms län       Västra Asien            12433 0.281 
11 Stockholms län       Östra Afrika             5990 0.136 
12 Stockholms län       Östra Europa             3500 0.0792
13 Västra Götalands län Sydost-Asien             2337 0.0966
14 Västra Götalands län Södra Europa             2407 0.0994
15 Västra Götalands län Södra och Central-Asien  3072 0.127 
16 Västra Götalands län Västra Asien             7085 0.293 
17 Västra Götalands län Östra Afrika             4475 0.185 
18 Västra Götalands län Östra Europa             1215 0.0502


ggplot(df_desk1, aes(reorder_within(FodelseLandNamn, andel, region), andel, fill = region)) +
        geom_bar(stat = "identity") +
        coord_flip() +
        scale_x_reordered() +
        facet_grid(region ~., scales = "free_x")

/Henrik

Upvotes: 3

Views: 3419

Answers (2)

s__
s__

Reputation: 9485

If I've undestood well, you can do this:

library(tidyverse)
ggplot(df_desk1, aes(reorder_within(FodelseLandNamn, andel, region), andel, fill = region)) +
  geom_bar(stat = "identity") +
  coord_flip() +
  scale_x_reordered() +
  facet_grid(region ~., scales = "free")

enter image description here

Using these.

Upvotes: 1

Arienrhod
Arienrhod

Reputation: 2581

I can't comment on s_t's solution (I'm lacking rep), but you need to change the scales = "free_x" to either scales = "free" or scales = "free_y". ggplot cleans up the extra levels then.

Upvotes: 2

Related Questions