plotly / plotly/plotly.js

[BUG]: geo projections lose their D3 default rotation

Offen
#7,949 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug P3 plotly-internal size: 3
Vorherrschende Sprache
JavaScript
Sterne
18.3k
Forks
2k
Ø Merge
2 T. 12 Std.
Gemergte PRs (30 T.)
28

Beschreibung

Description

Geo.updateProjection calls projection.rotate([-rotation.lon, -rotation.lat, rotation.roll]) unconditionally. For a world-scope map projection.rotation defaults to [0, 0, 0], so any rotation the D3 projection ships with is discarded.

Six of the projections in plotly.js carry a non-identity default rotation:

projection D3 default rotation
albers [96, 0, 0]
bertin1953 [-16.5, -42, 0]
gringorten quincuncial [-90, -90, 45]
peirce quincuncial [-90, -90, 45]
sinu mollweide [-20, -55, 0]
wiechel [0, -90, 45]

For the quincuncials and wiechel that rotation is geometric: it places the sphere in the polar aspect and tilts the square 45°, and is applied inside the projection's own constructor:

// d3-geo-projection/src/quincuncial/index.js
return projection(projectQuincuncial)
    .rotate([-90, -90, 45])
    .clipAngle(180 - 1e-3);

Replacing it renders a different orientation from the one D3 defines. (For albers, D3's [96, 0, 0] preconfigures it for the USA, so discarding it is probably intended.)

Screenshots/Video

For 'peirce quincuncial':

D3 projection Plotly projection
Image Image
Steps to reproduce
  • Be on master
  • Open Plotly devtools
  • Enter the following snippet into the browser console:
Plotly.newPlot(gd, [{
    type: 'choropleth',
    locations: ['GHA', 'ARG', 'AUS', 'CAN'],
    z: [1, 2, 3, 4],
    showscale: false
}], {
    geo: { projection: { type: 'peirce quincuncial' }, fitbounds: false },
    height: 800
});
  • Note that
  • Expected: the canonical peirce quincuncial orientation.
  • Actual: rendered with rotation [0, 0, 0].
Screenshots
Notes
  • A fix needs to compose the requested rotation onto each projection's default rather than replace it, since d3.geoProjection.rotate() replaces
  • This was discovered in #7948. It's possible that this is intentional for a good reason, but it would be worth looking at changing it regardless.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne bei Geo.updateProjection und vergleiche die Behandlung der Rotation mit den D3-Projektionskonstruktoren, insbesondere mit den im Issue beschriebenen quincuncial- und wiechel-Defaults. Reproduziere das peirce-quincuncial-Beispiel im Browser und überprüfe anschließend, dass die gerenderte Ausrichtung den kanonischen Default der Projektion beibehält und gleichzeitig eine angeforderte Rotation anwendet.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
javascript
Bereich
data-visualization
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Aktiv
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
72/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.