0

I'm trying to do a waffle chart for the championships won by F1 drivers so far. The chart comes out good but it comes out with alphabetical labels. I want it to start from the most titles won to the least.

I've tried ordering and fct_relevel. But nothing works. Below is the code

ggplot(data = dfc, aes(fill=Champions, values=one)) +
  geom_waffle(color = "cornsilk", size=0.25, n_rows=7)+
  facet_wrap(~Champions, nrow = 3, strip.position = "bottom",labeller = label_wrap_gen(6))

And this is the result I'm looking for.

You can find the entire code here

The dataset looks like

Season    Champions    Team   one
1              a           x     1
2              a           x     1
3              b           y     1
4              a           x     1
5              c           z     1
phalteman
  • 3,442
  • 1
  • 29
  • 46
Pavan
  • 27
  • 5

1 Answers1

0

Here's a solution using forcats (also part of the tidyverse package).

fct_infreq() orders factors according to their frequency in the data, and you can use that to specify the ordering of the levels in your data.

dfc$Champions <- factor(dfc$Champions, levels=levels(fct_infreq(dfc$Champions)))

ggplot(data = dfc, aes(fill=Champions, values=one)) +
  geom_waffle(color = "cornsilk", size=0.25, n_rows=7) +
  facet_wrap(~Champions, nrow = 3, strip.position = "bottom", labeller = label_wrap_gen(6))
phalteman
  • 3,442
  • 1
  • 29
  • 46