chart
bullet graph
also: bullet chartSingle bar compared to a target and reference bands.
Classification
- chart
- bars › range and target bars
- magnitude; Financial Times Visual Vocabulary
- the name evokes: object
Channels
position on common scale; main: measured value and target
length; main: measured value
color luminance; secondary: qualitative ranges (gray bands)
color saturation; secondary: qualitative ranges (instead of luminance)
Scientific literature
OpenAlex: 40 papers since 2000, 22% in the last five years; mostly in Computer Science, Mathematics, Business, Management and Accounting; Wikidata
Seminal references
- invention (2006) Few (2006). Information Dashboard Design. O'Reilly; Wikipedia in English
R packages
- R
ggplot2::geom_col(); GitHub 7 025 stars; last commit 2026-10; paper (33 455 citations)
R code of the ggplot2 example
library(ggplot2)
library(dplyr)
library(gapminder)
## One bullet per continent: the 2007 median life expectancy (bar), the 1952
## median (tick) and, behind them, the spread of its countries in 2007: full
## range (light band) and interquartile range (dark band).
bullets <- gapminder |>
filter(year %in% c(1952, 2007)) |>
group_by(continent) |>
summarise(median_2007 = median(lifeExp[year == 2007]),
median_1952 = median(lifeExp[year == 1952]),
min = min(lifeExp[year == 2007]), max = max(lifeExp[year == 2007]),
q1 = quantile(lifeExp[year == 2007], 0.25), q3 = quantile(lifeExp[year == 2007], 0.75)) |>
mutate(continent = factor(continent, levels = rev(levels(continent))), y = as.numeric(continent))
p <- ggplot(bullets) +
geom_rect(aes(xmin = min, xmax = max, ymin = y - 0.4, ymax = y + 0.4), fill = "#e6e6e6") +
geom_rect(aes(xmin = q1, xmax = q3, ymin = y - 0.4, ymax = y + 0.4), fill = "#c4c4c4") +
geom_rect(aes(xmin = 0, xmax = median_2007, ymin = y - 0.13, ymax = y + 0.13, fill = continent)) +
geom_segment(aes(x = median_1952, xend = median_1952, y = y - 0.28, yend = y + 0.28),
colour = "#262626", linewidth = 0.8) +
scale_fill_manual(values = continent_colors) +
scale_x_continuous(limits = c(0, 85), breaks = seq(0, 80, 20), expand = expansion(mult = c(0, 0.02))) +
scale_y_continuous(breaks = bullets$y, labels = bullets$continent) +
labs(title = "Asia's median life expectancy rose most, by 27.5 years",
subtitle = "Median, 2007 (bar) and 1952 (tick); gray bands: range (light) and middle half (dark) of the countries in 2007",
x = "Life expectancy at birth (years)", y = NULL,
caption = "Data: Gapminder, via the gapminder R package") +
theme_lex_viz(grid = "", arrows = "x") +
theme(legend.position = "none")Sources (10)
49 occurrences in the corpus; indexed by 5 books
- Better data visualizations: a guide for scholars, researchers, and wonks
- Data fluency: empowering your organization with effective data communication
- Data visualisation: a handbook for data driven design
- Data Viz Project
- datavizproject.com
- Effective data visualization: the right chart for the right data
- Practical charts: the essential guide to creating clear, compelling charts for reports ...
- The big book of dashboards: visualizing your data using real-world business scenarios
- The Truthful Art: Data, Charts, and Maps for Communication
- Wikipedia in English↗
Cite this entry
Stable addresshttps://dataviz.adrientaudiere.com/en-only/term/bullet-graph.html
ReferenceTaudière Adrien. 2026. bullet graph. In Visualization Vocabulary, version 1.0.0. IdEst. https://dataviz.adrientaudiere.com/en-only/term/bullet-graph.html
BibTeX
@incollection{taudiere2026-bullet-graph,
author = {Taudière, Adrien},
title = {bullet graph},
booktitle = {Visualization Vocabulary},
year = {2026},
version = {1.0.0},
publisher = {IdEst},
url = {https://dataviz.adrientaudiere.com/en-only/term/bullet-graph.html},
note = {CC0 1.0}
}Page created on 2026-10-13. Text last changed on 2026-11-12. Images last changed on 2026-11-12. Numbers computed on 2026-10-22.