Each radar axis shows a percentile rank (0–1), where 0 = best (center) and 1 = worst (outer edge) among all schemes in the current view.
Collect & sort — For each metric, all reported values are gathered and sorted by "better is first." For most metrics (query size, response size, server time, client time, storage) lower is better; for throughput, higher is better.
Percentile rank — rank = indexOf(value) / (totalValues − 1). The best scheme gets 0.0, the worst gets 1.0. If only one scheme reports a metric, it defaults to 0.5.
Missing data — If a scheme doesn't report a metric, it maps to 1.0 (outer edge) on that axis.
Asymptotics discount — For composite scoring only (not radar display), "from asymptotics" ranks are shrunk toward the middle: rank × 0.8 + 0.1, preventing theoretical estimates from dominating.
Reading: Smaller polygon = better. Hover shows raw value + rank percentage. Line style: solid = from data, dashed = from figures/analytics, dotted = from asymptotics. Fill opacity also decreases with tier.
A red ? at the outer edge marks metrics with no reported data — these default to rank 1.0 (worst) so the polygon visibly stretches outward on that axis.
How absolute normalization works
Each radar axis shows a log-scale normalized value (0–1), where 0 = best (center) and 1 = worst (outer edge).
Log transform — Raw values are log-transformed to handle orders-of-magnitude differences between schemes (e.g. 1 ms vs 10,000 ms).
Min-max normalize — norm = (log(v) − log(min)) / (log(max) − log(min)). The best value maps to 0.0, the worst to 1.0.
Proportional gaps preserved — Unlike relative mode, a 1000× difference in raw values produces a much larger radial gap than a 2× difference.
Missing data — Same as relative: maps to 1.0 (outer edge), marked with a red ?.
Reading: Smaller polygon = better. The shape reflects actual proportional performance differences, not just ordinal rank.