observablehq / observablehq/plot

A better “label centroid” initializer? (polylabel)

Open
#1,587 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement question
Dominant language
HTML
Stars
5.4k
Forks
244
PR merge metrics
No merged PRs in 30d

Description

The centroid of a geometry is sometimes outside of it, for example (but not exclusively) with a MultiPolygon such as France+Guyane. This can result in labels or interactive tips that are quite far off from the shape they identify.

A great solution is to use @mapbox/polylabel, which guarantees that the center is inside —and furthermore at an optimal position for a centered label. The dependency is less that 1kB over the wire, including tinyqueue. An alternative approach could be to add an option to Plot.centroid, to make it choose the centroid of the largest polygon when given a multipolygon. Subpar solution, but cheaper.

Prototype https://observablehq.com/@observablehq/plot-pole-of-inaccessibility-1587

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at the Plot.centroid entry point and inspect the linked Observable prototype for the proposed pole-of-inaccessibility approach. Compare the @mapbox/polylabel dependency with the largest-polygon alternative, then confirm the chosen behavior keeps labels or interactive tips within the geometry.

Written by the indexing model from the issue text.

Assessment

Domain
data-visualization
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.