Visualization VocabularyDataviz vocabulary
Diagram: Likert chart
Drawing: Adrien Taudière (CC0)
ggplot2 example: Likert chart
Adrien Taudière (CC0); R code ↓; data: British Election Panel Study 1997–2001, via carData (Fox, Weisberg & Price 2026) (GPL)

Classification

Channels

  • position on common scale; main: cumulative responses (segments without a common baseline, except around the neutral point)
  • position on unaligned scale; secondary: count of each response (segments without a common baseline, except around the neutral point)
  • length; main: count of each response
  • color saturation; secondary: ordered series (instead of hue if the category is ordered)
  • spatial region; main: sign
  • color hue; main: series (if the category is ordered, luminance or saturation can also be used)

Scientific literature

OpenAlex: 14 papers since 2020, 64% in the last five years; mostly in Social Sciences, Computer Science, Agricultural and Biological Sciences

Seminal references

R packages

R code of the ggplot2 example

library(ggplot2)
library(dplyr)
library(tidyr)
library(carData)

## Ratings from 1 to 5: unfavourable ones to the left of zero, favourable
## ones to the right, the middle rating split across zero.
shares <- BEPS |>
  pivot_longer(c(Blair, Hague, Kennedy), names_to = "leader", values_to = "rating") |>
  count(leader, rating) |>
  group_by(leader) |>
  mutate(share = 100 * n / sum(n),
         rating = factor(rating, levels = 5:1))
left <- shares |>
  filter(as.integer(as.character(rating)) <= 3) |>
  ## From zero outward: 3, then 2, then 1.
  mutate(share = -ifelse(rating == "3", share / 2, share), rating = factor(rating, levels = 1:5))
right <- shares |>
  filter(as.integer(as.character(rating)) >= 3) |>
  mutate(share = ifelse(rating == "3", share / 2, share))
favourable <- shares |>
  group_by(leader) |>
  summarise(fav = sum(share[as.integer(as.character(rating)) >= 4]))

p <- ggplot(mapping = aes(x = share, y = leader, fill = rating)) +
  geom_col(data = left, width = 0.6) +
  geom_col(data = mutate(right, rating = factor(rating, levels = 5:1)), width = 0.6) +
  geom_vline(xintercept = 0, colour = "#535353", linewidth = 0.4) +
  geom_text(data = favourable, aes(x = 72, y = leader, label = paste0(round(fav), "% rate 4 or 5")),
            inherit.aes = FALSE, hjust = 0, size = 3, colour = "#535353") +
  scale_fill_manual(values = setNames(idest_seq[c(1, 2, 3, 4, 6)], 1:5), breaks = 1:5,
                    name = "Rating, from 1 (worst) to 5") +
  scale_x_continuous(labels = \(x) paste0(lex_number(abs(x)), "%"), limits = c(-75, 100),
                     breaks = c(-50, -25, 0, 25, 50)) +
  labs(title = "65% of voters rated Blair 4 or 5, 41% Hague",
       subtitle = "British Election Panel Study, 1997–2001: party leaders rated from 1 to 5",
       x = "Share of voters", y = NULL,
       caption = "Data: BEPS, via the carData R package") +
  theme_lex_viz(grid = "x", arrows = "") +
  theme(legend.position = "top", legend.title.position = "left")

Cite this entry

Stable addresshttps://dataviz.adrientaudiere.com/en-only/term/likert-chart.html

ReferenceTaudière Adrien. 2026. Likert chart. In Visualization Vocabulary, version 1.0.0. IdEst. https://dataviz.adrientaudiere.com/en-only/term/likert-chart.html

BibTeX
@incollection{taudiere2026-likert-chart,
  author    = {Taudière, Adrien},
  title     = {Likert chart},
  booktitle = {Visualization Vocabulary},
  year      = {2026},
  version   = {1.0.0},
  publisher = {IdEst},
  url       = {https://dataviz.adrientaudiere.com/en-only/term/likert-chart.html},
  note      = {CC0 1.0}
}

Page created on 2026-10-13. Text last changed on 2026-11-02. Images last changed on 2026-11-12. Numbers computed on 2026-10-22.