Skip to main content

Star Plot

NIST/SEMATECH Section 1.3.3.29 Star Plot

Star Plot — 1979 Automobile Analysis AMC Concord AMC Pacer AMC Spirit Audi 5000 Audi Fox BMW 320i Buick Century Buick Electra Buick Le Sabre Buick Opel Buick Regal Buick Riviera Buick Skylark Cad. Deville Cad. Eldorado Cad. Seville
A star plot, also known as a radar chart or spider chart, displays multivariate data as a series of equi-angular spokes radiating from a central point, with each spoke representing a different variable. The data value for each variable determines the length of the corresponding spoke, and the tips of the spokes are connected to form a polygon whose shape provides a visual fingerprint of the observation.

What It Is

A star plot, also known as a radar chart or spider chart, displays multivariate data as a series of equi-angular spokes radiating from a central point, with each spoke representing a different variable. The data value for each variable determines the length of the corresponding spoke, and the tips of the spokes are connected to form a polygon whose shape provides a visual fingerprint of the observation.

Each observation is represented as a separate star (polygon) with p spokes radiating from a center point at equal angles (360/p degrees apart). Each spoke represents one variable, and the spoke length is proportional to the variable's value (typically scaled to 0–1 range). The tips of the spokes are connected to form a polygon. Large, regular polygons indicate uniformly high values; small polygons indicate uniformly low values; irregular shapes highlight dominant variables.

Questions This Plot Answers

  • What variables are dominant for a given observation?
  • Which observations are most similar (are there clusters)?
  • Are there outliers?

Why It Matters

The star plot enables the comparison of multivariate profiles across observations in a compact, visually intuitive format. It answers the question "which variables differentiate these observations?" at a glance, making it valuable for benchmarking, quality profiling, and competitive analysis where many attributes must be compared simultaneously.

When to Use a Star Plot

Use a star plot when comparing the multivariate profiles of individual observations or groups across many variables simultaneously. It is especially useful for comparing products, specimens, systems, or process conditions on multiple quality characteristics at once. The star plot enables rapid visual identification of which observations are similar, which are outliers, and which variables differentiate between groups. It is commonly used in quality control, benchmarking, and competitive analysis.

How to Interpret a Star Plot

Each spoke of the star represents one variable, and the distance from the center indicates the magnitude of that variable, typically scaled to a common range. A large, regular polygon indicates an observation that scores highly on all variables. A small polygon indicates uniformly low values. An irregular or lopsided polygon highlights variables where the observation is unusually high or low. When multiple star plots are displayed side by side, similar polygon shapes indicate similar multivariate profiles, while contrasting shapes indicate differentiation. The area of the polygon provides a rough aggregate measure, but the shape is more informative than the area alone.

Assumptions and Limitations

The star plot requires that all variables be measured on comparable scales or that the data be standardized before plotting. The visual impression depends on the ordering of variables around the perimeter, and different orderings can produce different visual patterns for the same data. The technique works best with 5 to 12 variables; fewer than 5 does not justify the radial layout, and more than 12 makes individual spokes difficult to distinguish. Star plots are helpful for small-to-moderate-sized multivariate data sets; their primary weakness is that their effectiveness is limited to data sets with less than a few hundred points, after which they tend to be overwhelming.

Reference: NIST/SEMATECH e-Handbook of Statistical Methods, Section 1.3.3.29

Python Example

import numpy as np
import matplotlib.pyplot as plt
# 1979 Automobile Analysis — first 16 cars from AUTO79.DAT
# 9 variables per NIST Section 1.3.3.29 sample plot
categories = ['Price', 'MPG', 'Rep 78', 'Rep 77',
'Headroom', 'Rear Seat', 'Trunk',
'Weight', 'Length']
n_vars = len(categories)
angles = np.linspace(0, 2 * np.pi, n_vars, endpoint=False)
# Raw data from AUTO79.DAT (-1 = missing, clamped to 0)
cars = {
'AMC Concord': [4099, 22, 3, 2, 2.5, 27.5, 11, 2930, 186],
'AMC Pacer': [4749, 17, 3, 1, 3.0, 25.5, 11, 3350, 173],
'AMC Spirit': [3799, 22,-1,-1, 3.0, 18.5, 12, 2640, 168],
'Audi 5000': [9690, 17, 5, 2, 3.0, 27.0, 15, 2830, 189],
'Audi Fox': [6295, 23, 3, 3, 2.5, 28.0, 11, 2070, 174],
'BMW 320i': [9735, 25, 4, 4, 2.5, 26.0, 12, 2650, 177],
'Buick Century': [4816, 20, 3, 3, 4.5, 29.0, 16, 3250, 196],
'Buick Electra': [7827, 15, 4, 4, 4.0, 31.5, 20, 4080, 222],
'Buick Le Sabre': [5788, 18, 3, 4, 4.0, 30.5, 21, 3670, 218],
'Buick Opel': [4453, 26,-1,-1, 3.0, 24.0, 10, 2230, 170],
'Buick Regal': [5189, 20, 3, 3, 2.0, 28.5, 16, 3280, 200],
'Buick Riviera': [10372,16, 3, 4, 3.5, 30.0, 17, 3880, 207],
'Buick Skylark': [4082, 19, 3, 3, 3.5, 27.0, 13, 3400, 200],
'Cad. Deville': [11385,14, 3, 3, 4.0, 31.5, 20, 4330, 221],
'Cad. Eldorado': [14500,14, 2, 2, 3.5, 30.0, 16, 3900, 204],
'Cad. Seville': [15906,21, 3, 3, 3.0, 30.0, 13, 4290, 204],
}
# Normalize each variable to [0, 1] by per-variable max (clamp negatives)
data = np.array(list(cars.values()))
data = np.clip(data, 0, None)
maxvals = data.max(axis=0)
normed = data / maxvals
cols, rows = 4, 4
fig, axes = plt.subplots(rows, cols, figsize=(12, 12),
subplot_kw=dict(polar=True))
for idx, (label, _) in enumerate(cars.items()):
ax = axes[idx // cols, idx % cols]
vals = np.concatenate([normed[idx], [normed[idx][0]]])
angs = np.concatenate([angles, [angles[0]]])
ax.plot(angs, vals, 'o-', linewidth=1.5, color='steelblue')
ax.fill(angs, vals, alpha=0.2, color='steelblue')
ax.set_thetagrids(np.degrees(angles), categories, fontsize=6)
ax.set_ylim(0, 1.1)
ax.set_title(label, fontsize=8, pad=10)
plt.suptitle("Star Plot — 1979 Automobile Analysis (NIST 1.3.3.29)",
y=1.02, fontsize=13)
plt.tight_layout()
plt.show()