Skip to content

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.

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:

178 glyphs · cell 0.4 px → glyph 0.22 · 7 overlapping pairs

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.

  1. 1Alcohol
  2. 2Malic acid
  3. 3Ash
  4. 4Alcalinity of ash
  5. 5Magnesium
  6. 6Total phenols
  7. 7Flavanoids
  8. 8Nonflavanoid phenols
  9. 9Proanthocyanins
  10. 10Color intensity
  11. 11Hue
  12. 12OD280/OD315 of diluted wines
  13. 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.

The same thirteen numbers, on a shared baseline and a shared scale, left to right in a fixed order:

178 glyphs · cell 0.4 px → glyph 0.15 · 12 overlapping pairs

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.

  1. 1Alcohol
  2. 2Malic acid
  3. 3Ash
  4. 4Alcalinity of ash
  5. 5Magnesium
  6. 6Total phenols
  7. 7Flavanoids
  8. 8Nonflavanoid phenols
  9. 9Proanthocyanins
  10. 10Color intensity
  11. 11Hue
  12. 12OD280/OD315 of diluted wines
  13. 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.

Neither wins outright, and the choice follows from the question:

starbars
overall similarity, at a glancegood — one silhouettepoor — thirteen comparisons
reading one named measurementpoor — which angle was hue?good — count along the row
survives shrinkinggood — outline persistspoor — bars merge into a block
many columnscrowds near the centrestays 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.

M. Forina, R. Leardi, C. Armanino and S. Lanteri Wine UCI Machine Learning Repository 1991.

178 wines from three cultivars, thirteen chemical measurements. Loaded through @saehrimnir/mistle.

Rene Cutura, Cristina Morariu, Zhanglin Cheng, Yunhai Wang, Daniel Weiskopf and Michael Sedlmair Hagrid: using Hilbert and Gosper curves to gridify scatterplots Journal of Visualization 25(6), 1291–1307, 2022. doi:10.1007/s12650-022-00854-7