Radar Chart Alternatives: Why Spider Charts Mislead

โฑ๏ธ 8 min read ๐Ÿ“Š Visualization

A radar chart looks like a compact way to compare several attributes at once, but the filled polygon that catches the eye is a poor picture of the data. Its area changes when you reorder the axes, grows with the square of the values, and turns into a tangle once more than two or three series overlap. For most comparisons, a bar chart or dot plot shows the same numbers on a common baseline and cannot be distorted by axis order.

Quick answer: Radar (spider) charts mislead because the polygon's area depends on the arbitrary order of the axes, grows with the square of the values (double every score and the area quadruples), and becomes unreadable when more than 2-3 series overlap. A radar is acceptable for cyclical data (months, hours, compass directions) or for a single profile whose overall shape is the point. Otherwise, use a horizontal bar chart for one series, grouped bars or a dot plot for two or three, and small multiples, parallel coordinates, or a heatmap for many.

What is a radar chart (spider chart)?

A radar chart, also called a spider, web, or star chart, places each variable on its own spoke radiating from a center point, with the spokes spaced evenly around the circle (360°/n apart for n variables). Each value is plotted as a distance from the center, and the points are joined into a closed polygon. The spokes usually share one radial scale, such as a 0-10 rating, so every variable has to be expressed in comparable units. Radar charts show up most often in product comparisons, skill assessments, and sports player profiles. Excel offers three versions: Radar, Radar with Markers, and Filled Radar.

Why are radar charts misleading?

Because the individual points are accurate but the shape they form is not. The polygon's size and outline are driven by the chart's geometry as much as by the numbers, and a filled shape is what readers compare first. Four problems stack up:

Why does the axis order change a radar chart's shape?

Because the polygon is built from triangles between neighboring spokes. With n evenly spaced spokes and a radial axis that starts at zero, the triangle between spokes i and i+1 has area 0.5 × ri × ri+1 × sin(360°/n), and the polygon's area is the sum of those triangles. So the area depends on the products of neighboring values, and which values are neighbors is decided by the order you listed the variables in. Put the high scores side by side and they multiply into large triangles. Interleave them with low scores and the same numbers draw a smaller, spikier shape. A single zero removes both triangles that touch its spoke.

Here is a worked example. Two laptops are rated 0-10 (higher is better) on six attributes. Laptop A scores 9 on Performance, Battery, and Display and 3 on Portability, Build, and Support. Laptop B scores 6, 5, 7, 8, 7, and 6 on the same attributes, in that order. Laptop A averages 6.0 and Laptop B averages 6.5. The table shows what two equally defensible axis orders do to the polygons. Areas are in squared score units, and a perfect 10 on every spoke would cover 259.8.

Axis orderLaptop A areaLaptop B areaB's polygon is larger by
Performance, Battery, Display, Portability, Build, Support101.3110.49%
Performance, Portability, Battery, Build, Display, Support70.1108.354%

The data and the averages are identical in both rows. In the first order, the chart says the laptops are close. In the second, Laptop B looks far more capable, only because Laptop A's three high scores no longer sit next to each other. You can check any ordering yourself:

import math

def radar_area(values):
    """Area of a radar polygon with evenly spaced spokes and a zero-based radial axis."""
    n = len(values)
    return 0.5 * math.sin(2 * math.pi / n) * sum(
        values[i] * values[(i + 1) % n] for i in range(n)
    )

# Order 1: Performance, Battery, Display, Portability, Build, Support
print(round(radar_area([9, 9, 9, 3, 3, 3]), 1))  # 101.3  Laptop A
print(round(radar_area([6, 5, 7, 8, 7, 6]), 1))  # 110.4  Laptop B

# Order 2: Performance, Portability, Battery, Build, Display, Support
print(round(radar_area([9, 3, 9, 3, 9, 3]), 1))  # 70.1   Laptop A
print(round(radar_area([6, 8, 5, 7, 7, 6]), 1))  # 108.3  Laptop B

Why does a radar chart exaggerate differences?

Because area grows with the square of the values. Each triangle's area is proportional to the product of two radii, so multiplying every value by k multiplies the polygon's area by k². In the six-spoke layout above, a product that scores 4 on every attribute covers 41.6 squared units, and one that scores 8 everywhere covers 166.3. The scores doubled; the area quadrupled. Each point's distance from the center is still a linear, honest encoding. The problem is that a filled polygon invites readers to compare shapes, and the size of the shape grows much faster than the scores behind it.

Why are values on a radar chart hard to compare?

Because there is no common baseline. Comparing Performance with Portability means comparing two distances measured along spokes that point in different directions, and reading an exact value means tracing along a spoke to the nearest concentric gridline and estimating between rings. Cleveland and McGill's ranking of perceptual tasks puts position along a common scale first, which is exactly what a bar chart or dot plot gives you and a radar chart gives up. The visual encoding hierarchy covers the full ranking.

Comparing two series on the same spoke is easier, since both points sit on one scale. On a radar, though, those points are often close together and attached to lines heading off at different angles, and long attribute labels crowd around the rim as you add spokes.

How many series can a radar chart show?

Two, sometimes three. Each added series is another closed polygon drawn over the same space, so the outlines cross at many points and it gets hard to tell which line is which at each crossing. Filled polygons make it worse: an opaque fill hides whatever is drawn beneath it, and semi-transparent fills blend into colors that do not appear in the legend. To compare four or more entities, give each one its own panel (small multiples) or switch to a chart with a shared baseline.

When is a radar chart acceptable?

When the circle means something, or when readers look at one shape rather than compare several. Three cases hold up:

Even in these cases, label the scale, start the radial axis at zero, and put the actual numbers on the spokes or in a table beside the chart.

What should I use instead of a radar chart?

Choose the replacement by how many entities you are comparing. Most radar charts are really a small table of scores, and every option below keeps those scores on straight, aligned axes. For the broader decision, see our guide to choosing the right chart type.

AlternativeBest whenTrade-off
Horizontal bar chartOne entity; readers need exact values or a rankingLoses the single-shape "profile" look
Grouped bar chartTwo or three entities compared attribute by attributeGets crowded as entities are added
Dot plot or dumbbell chartTwo or more entities compared precisely on one shared axisLess familiar to some audiences than bars
Small multiplesMany entities, each read as its own profileComparing across panels is less precise than within one panel
Parallel coordinatesMany entities; looking for clusters and trade-offs between attributesAxis order still matters, axes must be normalized, and dense plots need highlighting to read
HeatmapMany entities by many attributes; scanning for patternsColor is the least precise channel, so print the values in the cells
TableReaders need the exact numbers more than a patternNo pattern at a glance

A parallel coordinates plot is essentially a radar chart unrolled: the spokes become parallel vertical axes, and each entity becomes a line across them. In Excel, a clustered bar chart covers the one-to-three-entity cases; our Excel chart types guide explains when each built-in chart fits.

What does the laptop comparison look like without a radar chart?

Plot it as a dot plot: one row per attribute, one dot per laptop, and a light line joining the two dots so the gap on each attribute is visible. The trade-off the radar blurred is now plain. Laptop A leads by 2 to 4 points on Performance, Battery, and Display, and Laptop B leads by 3 to 5 points on Portability, Build, and Support. Reordering the rows changes the reading order but not a single length.

import matplotlib.pyplot as plt

attrs    = ["Performance", "Battery", "Display", "Portability", "Build", "Support"]
laptop_a = [9, 9, 9, 3, 3, 3]
laptop_b = [6, 5, 7, 8, 7, 6]
y = list(range(len(attrs)))

fig, ax = plt.subplots(figsize=(6, 3.5))
ax.hlines(y, laptop_a, laptop_b, color="lightgray", zorder=1)  # gap per attribute
ax.scatter(laptop_a, y, label="Laptop A", zorder=2)
ax.scatter(laptop_b, y, label="Laptop B", zorder=2)
ax.set_yticks(y, attrs)
ax.set_xlim(0, 10)
ax.invert_yaxis()  # first attribute at the top
ax.set_xlabel("Score (0-10, higher is better)")
ax.legend(ncol=2, loc="lower center", bbox_to_anchor=(0.5, 1.0), frameon=False)
plt.tight_layout()
plt.show()

Common mistakes

Most misleading radar charts fail in one of these ways, and several are just as easy to make in Excel as in code:

Pro Tip: Before you publish a radar chart, redraw it with the axes shuffled. If the shuffled version tells a different story, such as a different apparent winner or a much bigger or smaller gap, the chart is reporting your axis order rather than your data, so switch to a dot plot or grouped bars. If stakeholders insist on the radar because it is familiar, the same approach that works for gauge chart alternatives applies: show both versions side by side on the real data and let the aligned chart make the case.

โ† Back to Visualization Tips