Visualization VocabularyDataviz vocabulary
Diagram: Ishikawa diagram
Drawing: Adrien Taudière (CC0)
ggplot2 example: Ishikawa diagram
Adrien Taudière (CC0); R code ↓; data: Example of cause.and.effect(), via qcc (Scrucca 2017) (GPL)

chart

Ishikawa diagram

Fish-skeleton diagram that sorts the possible causes of an effect into categories, drawn as slanted bones along a central spine leading to the effect.

Classification

  • chart
  • networks and trees › hierarchical trees
  • the name evokes: eponym

Channels

  • tilt/angle; secondary: cause level (slanted bone for the category, horizontal for the cause)
  • spatial region; main: cause category

Attestation and synonyms

Scientific literature

OpenAlex: 9 441 papers since 1978, 51% in the last five years; mostly in Business, Management and Accounting, Engineering, Medicine; Wikidata

Seminal references

R packages

R code of the ggplot2 example

library(ggplot2)
library(dplyr)

## The example of qcc::cause.and.effect() (Scrucca 2017, GPL >= 2), copied
## here so that the script does not need qcc: the possible causes of surface
## flaws on machined parts, grouped by category. Categories above the spine,
## then below it, in the order of the help page.
causes <- list(
  Measurements = c("Micrometers", "Microscopes", "Inspectors"),
  Materials = c("Alloys", "Lubricants", "Suppliers"),
  Personnel = c("Shifts", "Supervisors", "Training", "Operators"),
  Environment = c("Condensation", "Moisture"),
  Methods = c("Brake", "Engager", "Angle"),
  Machines = c("Speed", "Lathes", "Bits", "Sockets")
)
dx <- 14  # horizontal run of a bone, from its outer end to the spine
bones <- tibble(category = names(causes), x = rep(c(6, 34, 62), 2),
                y = rep(c(10, -10), each = 3)) |>
  mutate(xend = x + dx, yend = 0)
## Each cause is a short horizontal rib on its bone, evenly spaced along it.
ribs <- bones |>
  rowwise() |>
  reframe(category = category, cause = causes[[category]],
          t = seq_along(cause) / (length(cause) + 1),
          xend = x + t * dx, y = y * (1 - t)) |>
  mutate(x = xend - 3)
stopifnot(nrow(ribs) == 19, nrow(bones) == 6)

p <- ggplot() +
  annotate("segment", x = 0, xend = 84, y = 0, yend = 0, colour = "#9b2367", linewidth = 0.8,
           arrow = grid::arrow(length = unit(1.6, "mm"), type = "closed")) +
  geom_segment(data = bones, aes(x = x, y = y, xend = xend, yend = yend), colour = "#535353", linewidth = 0.5) +
  geom_segment(data = ribs, aes(x = x, y = y, xend = xend, yend = y), colour = "#7d7d7d", linewidth = 0.3) +
  geom_text(data = ribs, aes(x = x - 0.5, y = y, label = cause), hjust = 1, size = 2.3, colour = "#262626") +
  geom_text(data = bones, aes(x = x, y = y + 1.4 * sign(y), label = category),
            fontface = "bold", size = 2.5, colour = "#262626") +
  annotate("tile", x = 92, y = 0, width = 15, height = 4.5, fill = "#9b2367") +
  annotate("text", x = 92, y = 0, label = "Surface\nflaws", colour = "white", fontface = "bold",
           size = 2.6, lineheight = 0.9) +
  scale_x_continuous(limits = c(-6, 100)) +
  scale_y_continuous(limits = c(-12.5, 12.5)) +
  labs(title = "Surface flaws: 19 possible causes in six categories",
       subtitle = "Cause-and-effect diagram, each bone a category, each rib a cause",
       x = NULL, y = NULL,
       caption = "Data: example of cause.and.effect(), qcc (Scrucca 2017)") +
  theme_lex_viz(grid = "", arrows = "") +
  theme(axis.text = element_blank())

Sources (2)

5 occurrences in the corpus

Cite this entry

Stable addresshttps://dataviz.adrientaudiere.com/en-only/term/ishikawa-diagram.html

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

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

Page created on 2026-11-09. Text last changed on 2026-11-10. Images last changed on 2026-11-10. Numbers computed on 2026-10-22.