R
ggplot
Published

February 17, 2023

Horizontal bar chart

To have horizontal bar charts ordered by frequency, I have used geom_bar() and coord_flip for a long time.

I have now learned in an example that this is not necessary.

Here are a few examples and the code for future references.

library(tidyverse)

mtcars <- as_tibble(datasets::mtcars)
ggplot(mtcars, aes(x = cyl)) +
  geom_bar(fill = "lightgreen")

I used to do some pre-processing to prepare data for the plot.

pl_dt <-
  mtcars |>
  mutate(cyl = fct_infreq(factor(cyl)) |> fct_rev())

For the figure, I used coord_flip.

ggplot(pl_dt, aes(cyl)) +
  geom_bar(fill = "grey") +
  coord_flip()

That was not necessary, as I have learned now.

ggplot(pl_dt, aes(y = cyl)) +
  geom_bar(fill = "lightblue")

Here is an alternative approach with geom_col().

pl_dt <-
  mtcars |>
  count(cyl) |>
  mutate(cyl = fct_reorder(factor(cyl), n))

ggplot(pl_dt, aes(x = n, y = cyl)) +
  geom_col(fill = "lightblue")