Skip to content

[BUG]: geo projections lose their D3 default rotation #7949

Description

@camdecoster

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions