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 |
 |
 |
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
Description
Geo.updateProjectioncallsprojection.rotate([-rotation.lon, -rotation.lat, rotation.roll])unconditionally. For a world-scope mapprojection.rotationdefaults 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:
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
wiechelthat 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: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':
Steps to reproduce
[0, 0, 0].Screenshots
Notes
d3.geoProjection.rotate()replaces