Wine
178 wines from three cultivars grown in the same region of Italy, each put through thirteen chemical measurements — alcohol, malic acid, magnesium, flavanoids, colour intensity, hue, proline and six more.
A projection turns those thirteen numbers into two. The cultivars separate cleanly, which is the headline, but it is also all you get: the plot can tell you that a wine belongs with its neighbours and nothing about why. Thirteen numbers went in and a position came out.
With four measurements you can nearly cheat them into position, colour and size. With thirteen you cannot — there is no scatterplot that shows thirteen variables. A glyph is the only way to keep them, and a glyph needs room, which is the whole argument for gridding.
Projected with DruidJS: the thirteen columns
are standardised, then new druid.UMAP(Z, { seed: 7 }).
node scripts/build-dataset.mjs WINE UMAP 7 regenerates it.
As stars
Section titled “As stars”One spoke per measurement, clockwise from the top, each scaled against that column’s range across the whole dataset. The outline is the wine’s profile:
Reading a glyph
One spoke per measurement, clockwise from the top in the order below. The outline is the item's profile. Each is scaled against that column's range across the whole dataset, so two glyphs are comparable.
- 1Alcohol
- 2Malic acid
- 3Ash
- 4Alcalinity of ash
- 5Magnesium
- 6Total phenols
- 7Flavanoids
- 8Nonflavanoid phenols
- 9Proanthocyanins
- 10Color intensity
- 11Hue
- 12OD280/OD315 of diluted wines
- 13Proline
Classes
- Cultivar 1
- Cultivar 2
- Cultivar 3
The item closest to each class's average profile — so it looks like the class rather than like an outlier.
A star is read as a silhouette. You do not decode thirteen spokes one at a time; you see a shape and match it against its neighbours, and what registers is lopsidedness — a wine heavy on one side of the circle against one that is evenly round.
As bars
Section titled “As bars”The same thirteen numbers, on a shared baseline and a shared scale, left to right in a fixed order:
Reading a glyph
One bar per measurement, left to right in the order below, sharing a baseline and a scale. Each is scaled against that column's range across the whole dataset, so two glyphs are comparable.
- 1Alcohol
- 2Malic acid
- 3Ash
- 4Alcalinity of ash
- 5Magnesium
- 6Total phenols
- 7Flavanoids
- 8Nonflavanoid phenols
- 9Proanthocyanins
- 10Color intensity
- 11Hue
- 12OD280/OD315 of diluted wines
- 13Proline
Classes
- Cultivar 1
- Cultivar 2
- Cultivar 3
The item closest to each class's average profile — so it looks like the class rather than like an outlier.
A bar chart is read as a sequence. Position along the row is what identifies a measurement, so you can find the flavanoid bar and compare it across glyphs — which is exactly the thing the star makes hard, because a spoke’s angle is a poorer positional cue than a slot in a row.
Which to reach for
Section titled “Which to reach for”Neither wins outright, and the choice follows from the question:
| star | bars | |
|---|---|---|
| overall similarity, at a glance | good — one silhouette | poor — thirteen comparisons |
| reading one named measurement | poor — which angle was hue? | good — count along the row |
| survives shrinking | good — outline persists | poor — bars merge into a block |
| many columns | crowds near the centre | stays legible, gets wide |
At the sizes a grid affords here, the star holds up better: it degrades into a blob that is still comparable, where the bars degrade into a smear that is not. Reach for bars when the reader has a specific column in mind and needs to look it up rather than take the whole profile in.
References
Section titled “References”Wine UCI Machine Learning Repository 1991.
178 wines from three cultivars, thirteen chemical measurements. Loaded through @saehrimnir/mistle.
Hagrid: using Hilbert and Gosper curves to gridify scatterplots Journal of Visualization 25(6), 1291–1307, 2022. doi:10.1007/s12650-022-00854-7