From b0c8448c506714e6d033ff5ad1cec7cbcf10ecde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Fri, 23 Sep 2016 18:33:20 -0400 Subject: [PATCH 01/14] geo: make geo trace module use calcData instead of fullData --- src/plots/geo/geo.js | 52 ++++++++++++++++++++++------------- src/plots/geo/index.js | 19 +++++++++++-- src/traces/choropleth/plot.js | 18 ++++++++---- src/traces/scattergeo/plot.js | 20 ++++++++++---- 4 files changed, 75 insertions(+), 34 deletions(-) diff --git a/src/plots/geo/geo.js b/src/plots/geo/geo.js index 968fc671251..9eea76e582a 100644 --- a/src/plots/geo/geo.js +++ b/src/plots/geo/geo.js @@ -17,8 +17,6 @@ var Color = require('../../components/color'); var Drawing = require('../../components/drawing'); var Axes = require('../../plots/cartesian/axes'); -var filterVisible = require('../../lib/filter_visible'); - var addProjectionsToD3 = require('./projections'); var createGeoScale = require('./set_scale'); var createGeoZoom = require('./zoom'); @@ -29,6 +27,9 @@ var xmlnsNamespaces = require('../../constants/xmlns_namespaces'); var topojsonUtils = require('../../lib/topojson_utils'); var topojsonFeature = require('topojson').feature; +// add a few projection types to d3.geo +addProjectionsToD3(d3); + function Geo(options, fullLayout) { @@ -37,9 +38,6 @@ function Geo(options, fullLayout) { this.container = options.container; this.topojsonURL = options.topojsonURL; - // add a few projection types to d3.geo - addProjectionsToD3(d3); - this.hoverContainer = null; this.topojsonName = null; @@ -65,7 +63,7 @@ module.exports = Geo; var proto = Geo.prototype; -proto.plot = function(geoData, fullLayout, promises) { +proto.plot = function(geoCalcData, fullLayout, promises) { var _this = this, geoLayout = fullLayout[_this.id], graphSize = fullLayout._size; @@ -97,7 +95,7 @@ proto.plot = function(geoData, fullLayout, promises) { if(PlotlyGeoAssets.topojson[_this.topojsonName] !== undefined) { _this.topojson = PlotlyGeoAssets.topojson[_this.topojsonName]; - _this.onceTopojsonIsLoaded(geoData, geoLayout); + _this.onceTopojsonIsLoaded(geoCalcData, geoLayout); } else { topojsonPath = topojsonUtils.getTopojsonPath( @@ -128,19 +126,19 @@ proto.plot = function(geoData, fullLayout, promises) { _this.topojson = topojson; PlotlyGeoAssets.topojson[_this.topojsonName] = topojson; - _this.onceTopojsonIsLoaded(geoData, geoLayout); + _this.onceTopojsonIsLoaded(geoCalcData, geoLayout); resolve(); }); })); } } - else _this.onceTopojsonIsLoaded(geoData, geoLayout); + else _this.onceTopojsonIsLoaded(geoCalcData, geoLayout); // TODO handle topojson-is-loading case // to avoid making multiple request while streaming }; -proto.onceTopojsonIsLoaded = function(geoData, geoLayout) { +proto.onceTopojsonIsLoaded = function(geoCalcData, geoLayout) { var i; this.drawLayout(geoLayout); @@ -148,11 +146,12 @@ proto.onceTopojsonIsLoaded = function(geoData, geoLayout) { var traceHashOld = this.traceHash; var traceHash = {}; - for(i = 0; i < geoData.length; i++) { - var trace = geoData[i]; + for(i = 0; i < geoCalcData.length; i++) { + var calcData = geoCalcData[i], + trace = calcData[0].trace; traceHash[trace.type] = traceHash[trace.type] || []; - traceHash[trace.type].push(trace); + traceHash[trace.type].push(calcData); } var moduleNamesOld = Object.keys(traceHashOld); @@ -165,19 +164,21 @@ proto.onceTopojsonIsLoaded = function(geoData, geoLayout) { var moduleName = moduleNamesOld[i]; if(moduleNames.indexOf(moduleName) === -1) { - var fakeModule = traceHashOld[moduleName][0]; - fakeModule.visible = false; - traceHash[moduleName] = [fakeModule]; + var fakeCalcTrace = traceHashOld[moduleName][0], + fakeTrace = fakeCalcTrace[0].trace; + + fakeTrace.visible = false; + traceHash[moduleName] = [fakeCalcTrace]; } } moduleNames = Object.keys(traceHash); for(i = 0; i < moduleNames.length; i++) { - var moduleData = traceHash[moduleNames[i]]; - var _module = moduleData[0]._module; + var moduleCalcData = traceHash[moduleNames[i]], + _module = moduleCalcData[0][0].trace._module; - _module.plot(this, filterVisible(moduleData), geoLayout); + _module.plot(this, filterVisible(moduleCalcData), geoLayout); } this.traceHash = traceHash; @@ -185,6 +186,19 @@ proto.onceTopojsonIsLoaded = function(geoData, geoLayout) { this.render(); }; +function filterVisible(calcDataIn) { + var calcDataOut = []; + + for(var i = 0; i < calcDataIn.length; i++) { + var calcTrace = calcDataIn[i], + trace = calcTrace[0].trace; + + if(trace.visible === true) calcDataOut.push(calcTrace); + } + + return calcDataOut; +} + proto.updateFx = function(hovermode) { this.showHover = (hovermode !== false); diff --git a/src/plots/geo/index.js b/src/plots/geo/index.js index cd277b1c9ca..9173a0e45eb 100644 --- a/src/plots/geo/index.js +++ b/src/plots/geo/index.js @@ -32,7 +32,7 @@ exports.supplyLayoutDefaults = require('./layout/defaults'); exports.plot = function plotGeo(gd) { var fullLayout = gd._fullLayout, - fullData = gd._fullData, + calcData = gd.calcdata, geoIds = Plots.getSubplotIds(fullLayout, 'geo'); /** @@ -45,7 +45,7 @@ exports.plot = function plotGeo(gd) { for(var i = 0; i < geoIds.length; i++) { var geoId = geoIds[i], - fullGeoData = Plots.getSubplotData(fullData, 'geo', geoId), + geoCalcData = getSubplotCalcData(calcData, geoId), geo = fullLayout[geoId]._geo; // If geo is not instantiated, create one! @@ -62,7 +62,7 @@ exports.plot = function plotGeo(gd) { fullLayout[geoId]._geo = geo; } - geo.plot(fullGeoData, fullLayout, gd._promises); + geo.plot(geoCalcData, fullLayout, gd._promises); } }; @@ -102,3 +102,16 @@ exports.toSVG = function(gd) { .appendChild(geoFramework.node()); } }; + +function getSubplotCalcData(calcData, id) { + var subplotCalcData = []; + + for(var i = 0; i < calcData.length; i++) { + var calcTrace = calcData[i], + trace = calcTrace[0].trace; + + if(trace.geo === id) subplotCalcData.push(calcTrace); + } + + return subplotCalcData; +} diff --git a/src/traces/choropleth/plot.js b/src/traces/choropleth/plot.js index 0393b55b15a..e9bbfa05266 100644 --- a/src/traces/choropleth/plot.js +++ b/src/traces/choropleth/plot.js @@ -58,7 +58,11 @@ plotChoropleth.calcGeoJSON = function(trace, topojson) { return cdi; }; -plotChoropleth.plot = function(geo, choroplethData, geoLayout) { +plotChoropleth.plot = function(geo, calcData, geoLayout) { + function keyFunc(d) { + return d[0].trace.uid; + } + var framework = geo.framework, gChoropleth = framework.select('g.choroplethlayer'), gBaseLayer = framework.select('g.baselayer'), @@ -68,15 +72,16 @@ plotChoropleth.plot = function(geo, choroplethData, geoLayout) { var gChoroplethTraces = gChoropleth .selectAll('g.trace.choropleth') - .data(choroplethData, function(trace) { return trace.uid; }); + .data(calcData, keyFunc); gChoroplethTraces.enter().append('g') .attr('class', 'trace choropleth'); gChoroplethTraces.exit().remove(); - gChoroplethTraces.each(function(trace) { - var cdi = plotChoropleth.calcGeoJSON(trace, geo.topojson), + gChoroplethTraces.each(function(calcTrace) { + var trace = calcTrace[0].trace, + cdi = plotChoropleth.calcGeoJSON(trace, geo.topojson), cleanHoverLabelsFunc = makeCleanHoverLabelsFunc(geo, trace), eventDataFunc = makeEventDataFunc(trace); @@ -143,8 +148,9 @@ plotChoropleth.plot = function(geo, choroplethData, geoLayout) { plotChoropleth.style = function(geo) { geo.framework.selectAll('g.trace.choropleth') - .each(function(trace) { - var s = d3.select(this), + .each(function(calcTrace) { + var trace = calcTrace[0].trace, + s = d3.select(this), marker = trace.marker || {}, markerLine = marker.line || {}, zmin = trace.zmin, diff --git a/src/traces/scattergeo/plot.js b/src/traces/scattergeo/plot.js index 921dce93b84..5463da8165a 100644 --- a/src/traces/scattergeo/plot.js +++ b/src/traces/scattergeo/plot.js @@ -115,10 +115,14 @@ function makeLineGeoJSON(trace) { }; } -plotScatterGeo.plot = function(geo, scattergeoData) { +plotScatterGeo.plot = function(geo, calcData) { + function keyFunc(d) { + return d[0].trace.uid; + } + var gScatterGeoTraces = geo.framework.select('.scattergeolayer') .selectAll('g.trace.scattergeo') - .data(scattergeoData, function(trace) { return trace.uid; }); + .data(calcData, keyFunc); gScatterGeoTraces.enter().append('g') .attr('class', 'trace scattergeo'); @@ -128,8 +132,9 @@ plotScatterGeo.plot = function(geo, scattergeoData) { // TODO find a way to order the inner nodes on update gScatterGeoTraces.selectAll('*').remove(); - gScatterGeoTraces.each(function(trace) { - var s = d3.select(this); + gScatterGeoTraces.each(function(calcTrace) { + var s = d3.select(this), + trace = calcTrace[0].trace; if(!subTypes.hasLines(trace)) return; @@ -141,8 +146,9 @@ plotScatterGeo.plot = function(geo, scattergeoData) { // TODO add hover - how? }); - gScatterGeoTraces.each(function(trace) { + gScatterGeoTraces.each(function(calcTrace) { var s = d3.select(this), + trace = calcTrace[0].trace, showMarkers = subTypes.hasMarkers(trace), showText = subTypes.hasText(trace); @@ -221,7 +227,9 @@ plotScatterGeo.style = function(geo) { return trace.opacity; }); - selection.each(function(trace) { + selection.each(function(calcTrace) { + var trace = calcTrace[0].trace; + d3.select(this).selectAll('path.point') .call(Drawing.pointStyle, trace); d3.select(this).selectAll('text') From d0e110439ca0cba5e935bfb112265a0c6c088041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:09:29 -0400 Subject: [PATCH 02/14] geo: rename fullLayout.geo._geo ref -> _subplot - which is consistent with mapbox subplot, and comptabitible with Fx.hover --- src/components/modebar/buttons.js | 2 +- src/plot_api/subroutines.js | 2 +- src/plots/geo/index.js | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/modebar/buttons.js b/src/components/modebar/buttons.js index 18e4280abcc..7536885207f 100644 --- a/src/components/modebar/buttons.js +++ b/src/components/modebar/buttons.js @@ -420,7 +420,7 @@ function handleGeo(gd, ev) { geoIds = Plots.getSubplotIds(fullLayout, 'geo'); for(var i = 0; i < geoIds.length; i++) { - var geo = fullLayout[geoIds[i]]._geo; + var geo = fullLayout[geoIds[i]]._subplot; if(attr === 'zoom') { var scale = geo.projection.scale(); diff --git a/src/plot_api/subroutines.js b/src/plot_api/subroutines.js index 758a778df92..5052445294e 100644 --- a/src/plot_api/subroutines.js +++ b/src/plot_api/subroutines.js @@ -312,7 +312,7 @@ exports.doModeBar = function(gd) { subplotIds = Plots.getSubplotIds(fullLayout, 'geo'); for(i = 0; i < subplotIds.length; i++) { - var geo = fullLayout[subplotIds[i]]._geo; + var geo = fullLayout[subplotIds[i]]._subplot; geo.updateFx(fullLayout.hovermode); } diff --git a/src/plots/geo/index.js b/src/plots/geo/index.js index 9173a0e45eb..1ef3282e6ae 100644 --- a/src/plots/geo/index.js +++ b/src/plots/geo/index.js @@ -46,7 +46,7 @@ exports.plot = function plotGeo(gd) { for(var i = 0; i < geoIds.length; i++) { var geoId = geoIds[i], geoCalcData = getSubplotCalcData(calcData, geoId), - geo = fullLayout[geoId]._geo; + geo = fullLayout[geoId]._subplot; // If geo is not instantiated, create one! if(geo === undefined) { @@ -59,7 +59,7 @@ exports.plot = function plotGeo(gd) { fullLayout ); - fullLayout[geoId]._geo = geo; + fullLayout[geoId]._subplot = geo; } geo.plot(geoCalcData, fullLayout, gd._promises); @@ -71,7 +71,7 @@ exports.clean = function(newFullData, newFullLayout, oldFullData, oldFullLayout) for(var i = 0; i < oldGeoKeys.length; i++) { var oldGeoKey = oldGeoKeys[i]; - var oldGeo = oldFullLayout[oldGeoKey]._geo; + var oldGeo = oldFullLayout[oldGeoKey]._subplot; if(!newFullLayout[oldGeoKey] && !!oldGeo) { oldGeo.geoDiv.remove(); @@ -87,7 +87,7 @@ exports.toSVG = function(gd) { for(var i = 0; i < geoIds.length; i++) { var geoLayout = fullLayout[geoIds[i]], domain = geoLayout.domain, - geoFramework = geoLayout._geo.framework; + geoFramework = geoLayout._subplot.framework; geoFramework.attr('style', null); geoFramework From 4448eaacae6562d167033ca0f8556e2ebc1cf854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:10:58 -0400 Subject: [PATCH 03/14] util: move GeoJSON coords / type logic in own module - to be reuse in 'scattergeo' --- src/lib/geojson_utils.js | 130 ++++++++++++++++++++++++++++ src/traces/scattermapbox/convert.js | 66 ++------------ 2 files changed, 136 insertions(+), 60 deletions(-) create mode 100644 src/lib/geojson_utils.js diff --git a/src/lib/geojson_utils.js b/src/lib/geojson_utils.js new file mode 100644 index 00000000000..80751a1bcaa --- /dev/null +++ b/src/lib/geojson_utils.js @@ -0,0 +1,130 @@ +/** +* Copyright 2012-2016, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + + +'use strict'; + +/** + * Convert calcTrace to GeoJSON 'MultiLineString' coordinate arrays + * + * @param {object} calcTrace + * gd.calcdata item. + * Note that calcTrace[i].lonlat is assumed to be defined + * + * @return {array} + * return line coords array (or array of arrays) + * + */ +exports.calcTraceToLineCoords = function(calcTrace) { + var trace = calcTrace[0].trace, + connectgaps = trace.connectgaps; + + var coords = [], + lineString = []; + + for(var i = 0; i < calcTrace.length; i++) { + var calcPt = calcTrace[i]; + + lineString.push(calcPt.lonlat); + + if(!connectgaps && calcPt.gapAfter && lineString.length > 0) { + coords.push(lineString); + lineString = []; + } + } + + coords.push(lineString); + + return coords; +}; + + +/** + * Make line ('LineString' or 'MultiLineString') GeoJSON + * + * @param {array} coords + * results form calcTraceToLineCoords + * @param {object} trace + * (optional) full trace object to be added on to output + * + * @return {object} out + * GeoJSON object + * + */ +exports.makeLine = function(coords, trace) { + var out = {}; + + if(coords.length === 1) { + out = { + type: 'LineString', + coordinates: coords[0] + }; + } + else { + out = { + type: 'MultiLineString', + coordinates: coords + }; + } + + if(trace) out.trace = trace; + + return out; +}; + +/** + * Make polygon ('Polygon' or 'MultiPolygon') GeoJSON + * + * @param {array} coords + * results form calcTraceToLineCoords + * @param {object} trace + * (optional) full trace object to be added on to output + * + * @return {object} out + * GeoJSON object + */ +exports.makePolygon = function(coords, trace) { + var out = {}; + + if(coords.length === 1) { + out = { + type: 'Polygon', + coordinates: coords + }; + } + else { + var _coords = new Array(coords.length); + + for(var i = 0; i < coords.length; i++) { + _coords[i] = [coords[i]]; + } + + out = { + type: 'MultiPolygon', + coordinates: _coords + }; + } + + if(trace) out.trace = trace; + + return out; +}; + +/** + * Make blank GeoJSON + * + * @return {object} + * Blank GeoJSON object + * + */ +exports.makeBlank = function() { + return { + type: 'Point', + coordinates: [] + }; +}; diff --git a/src/traces/scattermapbox/convert.js b/src/traces/scattermapbox/convert.js index 8928d081fd9..d0484d2c60a 100644 --- a/src/traces/scattermapbox/convert.js +++ b/src/traces/scattermapbox/convert.js @@ -10,6 +10,8 @@ 'use strict'; var Lib = require('../../lib'); +var geoJsonUtils = require('../../lib/geojson_utils'); + var subTypes = require('../scatter/subtypes'); var convertTextOpts = require('../../plots/mapbox/convert_text_opts'); @@ -46,11 +48,11 @@ module.exports = function convert(calcTrace) { // fill layer and line layer use the same coords var coords; if(hasFill || hasLines) { - coords = getCoords(calcTrace); + coords = geoJsonUtils.calcTraceToLineCoords(calcTrace); } if(hasFill) { - fill.geojson = makeFillGeoJSON(calcTrace, coords); + fill.geojson = geoJsonUtils.makePolygon(coords); fill.layout.visibility = 'visible'; Lib.extendFlat(fill.paint, { @@ -59,7 +61,7 @@ module.exports = function convert(calcTrace) { } if(hasLines) { - line.geojson = makeLineGeoJSON(calcTrace, coords); + line.geojson = geoJsonUtils.makeLine(coords); line.layout.visibility = 'visible'; Lib.extendFlat(line.paint, { @@ -133,45 +135,12 @@ module.exports = function convert(calcTrace) { function initContainer() { return { - geojson: makeBlankGeoJSON(), + geojson: geoJsonUtils.makeBlank(), layout: { visibility: 'none' }, paint: {} }; } -function makeBlankGeoJSON() { - return { - type: 'Point', - coordinates: [] - }; -} - -function makeFillGeoJSON(_, coords) { - if(coords.length === 1) { - return { - type: 'Polygon', - coordinates: coords - }; - } - - var _coords = new Array(coords.length); - for(var i = 0; i < coords.length; i++) { - _coords[i] = [coords[i]]; - } - - return { - type: 'MultiPolygon', - coordinates: _coords - }; -} - -function makeLineGeoJSON(_, coords) { - return { - type: 'MultiLineString', - coordinates: coords - }; -} - // N.B. `hash` is mutated here // // The `hash` object contains mapping between values @@ -323,29 +292,6 @@ function calcCircleRadius(trace, hash) { return out; } -function getCoords(calcTrace) { - var trace = calcTrace[0].trace, - connectgaps = trace.connectgaps; - - var coords = [], - lineString = []; - - for(var i = 0; i < calcTrace.length; i++) { - var calcPt = calcTrace[i]; - - lineString.push(calcPt.lonlat); - - if(!connectgaps && calcPt.gapAfter && lineString.length > 0) { - coords.push(lineString); - lineString = []; - } - } - - coords.push(lineString); - - return coords; -} - function getFillFunc(attr) { if(Array.isArray(attr)) { return function(v) { return v; }; From 52c1b89d2f90453f259f766d7c79012e4bff1827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:14:13 -0400 Subject: [PATCH 04/14] scattergeo: add proper calc step - which skips and cast lon/lat values - fixes https://github.com/plotly/plotly.js/issues/963 - note that 'locations[i]' -> feature must still be done at the plot (after the topojson is loaded) --- src/traces/scattergeo/calc.js | 42 +++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/traces/scattergeo/calc.js b/src/traces/scattergeo/calc.js index bb338a66f3b..db64733155a 100644 --- a/src/traces/scattergeo/calc.js +++ b/src/traces/scattergeo/calc.js @@ -9,13 +9,47 @@ 'use strict'; -var calcColorscale = require('../scatter/colorscale_calc'); +var isNumeric = require('fast-isnumeric'); + +var calcMarkerColorscale = require('../scatter/colorscale_calc'); module.exports = function calc(gd, trace) { - var cd = [{x: false, y: false, trace: trace, t: {}}]; + var hasLocationData = Array.isArray(trace.locations), + len = hasLocationData ? trace.locations.length : trace.lon.length; + + var calcTrace = [], + cnt = 0; + + for(var i = 0; i < len; i++) { + var calcPt = {}, + skip; + + if(hasLocationData) { + var loc = trace.locations[i]; + + calcPt.loc = loc; + skip = (typeof loc !== 'string'); + } + else { + var lon = trace.lon[i], + lat = trace.lat[i]; + + calcPt.lonlat = [+lon, +lat]; + skip = (!isNumeric(lon) || !isNumeric(lat)); + } + + if(skip) { + if(cnt > 0) calcTrace[cnt - 1].gapAfter = true; + continue; + } + + cnt++; + + calcTrace.push(calcPt); + } - calcColorscale(trace); + calcMarkerColorscale(trace); - return cd; + return calcTrace; }; From dd05c6ee857ff5e5e537ccf946d715e60f9924e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:16:54 -0400 Subject: [PATCH 05/14] calc: add 'placeholder' field in calc traces that have no data pts - traces with no data points are given a place-holder calc trace to retatin fullData.length === gd.calcdata.length, and make some component (e.g. legend) logic easier - tag these place-holder traces so that the plot modules can easily skip over them --- src/plots/plots.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plots/plots.js b/src/plots/plots.js index 195981f6185..e79bf9e07b2 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1669,10 +1669,13 @@ plots.doCalcdata = function(gd, traces) { if(_module.calc) cd = _module.calc(gd, trace); } - // make sure there is a first point - // this ensures there is a calcdata item for every trace, - // even if cartesian logic doesn't handle it - if(!Array.isArray(cd) || !cd[0]) cd = [{x: false, y: false}]; + // Make sure there is a first point. + // This ensures there is a calcdata item for every trace, + // even if cartesian logic doesn't handle it (for things like legends). + // Tag this artificial calc point with 'placeholder: true' + if(!Array.isArray(cd) || !cd[0]) { + cd = [{x: false, y: false, placeholder: true}]; + } // add the trace-wide properties to the first point, // per point properties to every point From 3d0aeff1c4324777d729e96f11bde684d76cc482 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:18:35 -0400 Subject: [PATCH 06/14] scattermapbox: implement placeholder logic - so plotting that data-pt less traces do result in mapbox errors. --- src/traces/scattermapbox/convert.js | 4 ++-- src/traces/scattermapbox/hover.js | 2 ++ test/jasmine/tests/scattermapbox_test.js | 23 ++++++++++++++++++----- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/traces/scattermapbox/convert.js b/src/traces/scattermapbox/convert.js index d0484d2c60a..2843c37958f 100644 --- a/src/traces/scattermapbox/convert.js +++ b/src/traces/scattermapbox/convert.js @@ -42,8 +42,8 @@ module.exports = function convert(calcTrace) { symbol: symbol }; - // early return is not visible - if(!isVisible) return opts; + // early return if not visible or placeholder + if(!isVisible || calcTrace[0].placeholder) return opts; // fill layer and line layer use the same coords var coords; diff --git a/src/traces/scattermapbox/hover.js b/src/traces/scattermapbox/hover.js index 9bb9ea630c1..79af40ae66a 100644 --- a/src/traces/scattermapbox/hover.js +++ b/src/traces/scattermapbox/hover.js @@ -19,6 +19,8 @@ module.exports = function hoverPoints(pointData, xval, yval) { xa = pointData.xa, ya = pointData.ya; + if(cd[0].placeholder) return; + // compute winding number about [-180, 180] globe var winding = (xval >= 0) ? Math.floor((xval + 180) / 360) : diff --git a/test/jasmine/tests/scattermapbox_test.js b/test/jasmine/tests/scattermapbox_test.js index 80787a43e5b..80fede37ff6 100644 --- a/test/jasmine/tests/scattermapbox_test.js +++ b/test/jasmine/tests/scattermapbox_test.js @@ -244,13 +244,12 @@ describe('scattermapbox convert', function() { function _convert(trace) { var gd = { data: [trace] }; - Plots.supplyDefaults(gd); var fullTrace = gd._fullData[0]; - var calcTrace = ScatterMapbox.calc(gd, fullTrace); - calcTrace[0].trace = fullTrace; + Plots.doCalcdata(gd, fullTrace); + var calcTrace = gd.calcdata[0]; return convert(calcTrace); } @@ -353,9 +352,9 @@ describe('scattermapbox convert', function() { assertVisibility(opts, ['none', 'visible', 'none', 'visible']); - var lineCoords = [[ + var lineCoords = [ [10, 20], [20, 20], [30, 10], [20, 10], [10, 20] - ]]; + ]; expect(opts.line.geojson.coordinates).toEqual(lineCoords, 'have correct line coords'); @@ -413,6 +412,20 @@ describe('scattermapbox convert', function() { expect(radii).toBeCloseToArray([0, 1, 0], 'link features to correct stops'); }); + it('for input only blank pts', function() { + var opts = _convert(Lib.extendFlat({}, base, { + mode: 'lines', + lon: ['', null], + lat: [null, ''], + fill: 'toself' + })); + + assertVisibility(opts, ['none', 'none', 'none', 'none']); + + expect(opts.line.geojson.coordinates).toEqual([], 'have correct line coords'); + expect(opts.fill.geojson.coordinates).toEqual([], 'have correct fill coords'); + }); + function assertVisibility(opts, expectations) { var actual = ['fill', 'line', 'circle', 'symbol'].map(function(l) { return opts[l].layout.visibility; From 63ee7f753cbd9584a72b7e4f414462f270488857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:20:40 -0400 Subject: [PATCH 07/14] fx: add eventData hook to customize event data module-by-module --- src/plots/cartesian/graph_interact.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/plots/cartesian/graph_interact.js b/src/plots/cartesian/graph_interact.js index bed9ad0b723..4bfbd88ecd1 100644 --- a/src/plots/cartesian/graph_interact.js +++ b/src/plots/cartesian/graph_interact.js @@ -583,19 +583,27 @@ function hover(gd, evt, subplot) { // other people and send it to the event for(itemnum = 0; itemnum < hoverData.length; itemnum++) { var pt = hoverData[itemnum]; + var out = { data: pt.trace._input, fullData: pt.trace, curveNumber: pt.trace.index, - pointNumber: pt.index, - x: pt.xVal, - y: pt.yVal, - xaxis: pt.xa, - yaxis: pt.ya + pointNumber: pt.index }; - if(pt.zLabelVal !== undefined) out.z = pt.zLabelVal; + + if(pt.trace._module.eventData) out = pt.trace._module.eventData(out, pt); + else { + out.x = pt.xVal; + out.y = pt.yVal; + out.xaxis = pt.xa; + out.yaxis = pt.ya; + + if(pt.zLabelVal !== undefined) out.z = pt.zLabelVal; + } + newhoverdata.push(out); } + gd._hoverdata = newhoverdata; if(!hoverChanged(gd, evt, oldhoverdata)) return; From 78d9afa4532e47f8afb276af86f2613ddb450212 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:21:52 -0400 Subject: [PATCH 08/14] scattermapbox: use eventData hook to add lon[i], lat[i] to event data --- src/traces/scattermapbox/event_data.js | 18 ++++++++++++++++++ src/traces/scattermapbox/index.js | 1 + test/jasmine/tests/mapbox_test.js | 9 +++------ 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 src/traces/scattermapbox/event_data.js diff --git a/src/traces/scattermapbox/event_data.js b/src/traces/scattermapbox/event_data.js new file mode 100644 index 00000000000..1a0b379d548 --- /dev/null +++ b/src/traces/scattermapbox/event_data.js @@ -0,0 +1,18 @@ +/** +* Copyright 2012-2016, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + + +'use strict'; + + +module.exports = function eventData(out, pt) { + out.lon = pt.lon; + out.lat = pt.lat; + + return out; +}; diff --git a/src/traces/scattermapbox/index.js b/src/traces/scattermapbox/index.js index bb0a5af7c2b..e07c574be1c 100644 --- a/src/traces/scattermapbox/index.js +++ b/src/traces/scattermapbox/index.js @@ -16,6 +16,7 @@ ScatterMapbox.supplyDefaults = require('./defaults'); ScatterMapbox.colorbar = require('../scatter/colorbar'); ScatterMapbox.calc = require('./calc'); ScatterMapbox.hoverPoints = require('./hover'); +ScatterMapbox.eventData = require('./event_data'); ScatterMapbox.plot = require('./plot'); ScatterMapbox.moduleType = 'trace'; diff --git a/test/jasmine/tests/mapbox_test.js b/test/jasmine/tests/mapbox_test.js index 867c99c6e1c..789ae984efb 100644 --- a/test/jasmine/tests/mapbox_test.js +++ b/test/jasmine/tests/mapbox_test.js @@ -695,8 +695,7 @@ describe('mapbox plots', function() { return _mouseEvent('mousemove', pointPos, function() { expect(hoverData).not.toBe(undefined, 'firing on data points'); expect(Object.keys(hoverData)).toEqual([ - 'data', 'fullData', 'curveNumber', 'pointNumber', - 'x', 'y', 'xaxis', 'yaxis' + 'data', 'fullData', 'curveNumber', 'pointNumber', 'lon', 'lat' ], 'returning the correct event data keys'); expect(hoverData.curveNumber).toEqual(0, 'returning the correct curve number'); expect(hoverData.pointNumber).toEqual(0, 'returning the correct point number'); @@ -706,8 +705,7 @@ describe('mapbox plots', function() { return _mouseEvent('mousemove', blankPos, function() { expect(unhoverData).not.toBe(undefined, 'firing on data points'); expect(Object.keys(unhoverData)).toEqual([ - 'data', 'fullData', 'curveNumber', 'pointNumber', - 'x', 'y', 'xaxis', 'yaxis' + 'data', 'fullData', 'curveNumber', 'pointNumber', 'lon', 'lat' ], 'returning the correct event data keys'); expect(unhoverData.curveNumber).toEqual(0, 'returning the correct curve number'); expect(unhoverData.pointNumber).toEqual(0, 'returning the correct point number'); @@ -804,8 +802,7 @@ describe('mapbox plots', function() { return _click(pointPos, function() { expect(ptData).not.toBe(undefined, 'firing on data points'); expect(Object.keys(ptData)).toEqual([ - 'data', 'fullData', 'curveNumber', 'pointNumber', - 'x', 'y', 'xaxis', 'yaxis' + 'data', 'fullData', 'curveNumber', 'pointNumber', 'lon', 'lat' ], 'returning the correct event data keys'); expect(ptData.curveNumber).toEqual(0, 'returning the correct curve number'); expect(ptData.pointNumber).toEqual(0, 'returning the correct point number'); From 3a0c621e2bcbbc0920e18bd1c8209d863f967618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:24:17 -0400 Subject: [PATCH 09/14] scattergeo: refactor plot !! - add support for 'connectgaps' - add support for 'fill: 'toself' - remove all traces of hover / click handlers --- src/traces/scatter/fillcolor_defaults.js | 1 - src/traces/scattergeo/attributes.js | 26 +- src/traces/scattergeo/defaults.js | 7 + src/traces/scattergeo/index.js | 2 +- src/traces/scattergeo/plot.js | 320 +++++++---------------- src/traces/scattermapbox/attributes.js | 13 +- 6 files changed, 125 insertions(+), 244 deletions(-) diff --git a/src/traces/scatter/fillcolor_defaults.js b/src/traces/scatter/fillcolor_defaults.js index 9871c09cd3b..2c60cc56d7a 100644 --- a/src/traces/scatter/fillcolor_defaults.js +++ b/src/traces/scatter/fillcolor_defaults.js @@ -12,7 +12,6 @@ var Color = require('../../components/color'); -// common to 'scatter' and 'scattergl' module.exports = function fillColorDefaults(traceIn, traceOut, defaultColor, coerce) { var inheritColorFromMarker = false; diff --git a/src/traces/scattergeo/attributes.js b/src/traces/scattergeo/attributes.js index 7ee7155fc1c..d7f68c40234 100644 --- a/src/traces/scattergeo/attributes.js +++ b/src/traces/scattergeo/attributes.js @@ -27,6 +27,7 @@ module.exports = { valType: 'data_array', description: 'Sets the latitude coordinates (in degrees North).' }, + locations: { valType: 'data_array', description: [ @@ -45,7 +46,9 @@ module.exports = { 'to regions on the map.' ].join(' ') }, + mode: extendFlat({}, scatterAttrs.mode, {dflt: 'markers'}), + text: extendFlat({}, scatterAttrs.text, { description: [ 'Sets text elements associated with each (lon,lat) pair', @@ -56,11 +59,16 @@ module.exports = { 'this trace\'s (lon,lat) or `locations` coordinates.' ].join(' ') }), + textfont: scatterAttrs.textfont, + textposition: scatterAttrs.textposition, + line: { color: scatterLineAttrs.color, width: scatterLineAttrs.width, dash: scatterLineAttrs.dash }, + connectgaps: scatterAttrs.connectgaps, + marker: extendFlat({}, { symbol: scatterMarkerAttrs.symbol, opacity: scatterMarkerAttrs.opacity, @@ -76,11 +84,25 @@ module.exports = { }, colorAttributes('marker') ), - textfont: scatterAttrs.textfont, - textposition: scatterAttrs.textposition, + + fill: { + valType: 'enumerated', + values: ['none', 'toself'], + dflt: 'none', + role: 'style', + description: [ + 'Sets the area to fill with a solid color.', + 'Use with `fillcolor` if not *none*.', + '*toself* connects the endpoints of the trace (or each segment', + 'of the trace if it has gaps) into a closed shape.' + ].join(' ') + }, + fillcolor: scatterAttrs.fillcolor, + hoverinfo: extendFlat({}, plotAttrs.hoverinfo, { flags: ['lon', 'lat', 'location', 'text', 'name'] }), + _nestedModules: { 'marker.colorbar': 'Colorbar' } diff --git a/src/traces/scattergeo/defaults.js b/src/traces/scattergeo/defaults.js index 1990a000dcd..509b3466ba0 100644 --- a/src/traces/scattergeo/defaults.js +++ b/src/traces/scattergeo/defaults.js @@ -15,6 +15,7 @@ var subTypes = require('../scatter/subtypes'); var handleMarkerDefaults = require('../scatter/marker_defaults'); var handleLineDefaults = require('../scatter/line_defaults'); var handleTextDefaults = require('../scatter/text_defaults'); +var handleFillColorDefaults = require('../scatter/fillcolor_defaults'); var attributes = require('./attributes'); @@ -35,6 +36,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout if(subTypes.hasLines(traceOut)) { handleLineDefaults(traceIn, traceOut, defaultColor, layout, coerce); + coerce('connectgaps'); } if(subTypes.hasMarkers(traceOut)) { @@ -45,6 +47,11 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout handleTextDefaults(traceIn, traceOut, layout, coerce); } + coerce('fill'); + if(traceOut.fill !== 'none') { + handleFillColorDefaults(traceIn, traceOut, defaultColor, coerce); + } + coerce('hoverinfo', (layout._dataLength === 1) ? 'lon+lat+location+text' : undefined); }; diff --git a/src/traces/scattergeo/index.js b/src/traces/scattergeo/index.js index ef515a892f3..a3ad24f2285 100644 --- a/src/traces/scattergeo/index.js +++ b/src/traces/scattergeo/index.js @@ -15,7 +15,7 @@ ScatterGeo.attributes = require('./attributes'); ScatterGeo.supplyDefaults = require('./defaults'); ScatterGeo.colorbar = require('../scatter/colorbar'); ScatterGeo.calc = require('./calc'); -ScatterGeo.plot = require('./plot').plot; +ScatterGeo.plot = require('./plot'); ScatterGeo.moduleType = 'trace'; ScatterGeo.name = 'scattergeo'; diff --git a/src/traces/scattergeo/plot.js b/src/traces/scattergeo/plot.js index 5463da8165a..32055866a44 100644 --- a/src/traces/scattergeo/plot.js +++ b/src/traces/scattergeo/plot.js @@ -11,69 +11,104 @@ var d3 = require('d3'); -var Fx = require('../../plots/cartesian/graph_interact'); -var Axes = require('../../plots/cartesian/axes'); +var Drawing = require('../../components/drawing'); +var Color = require('../../components/color'); +var Lib = require('../../lib'); var getTopojsonFeatures = require('../../lib/topojson_utils').getTopojsonFeatures; var locationToFeature = require('../../lib/geo_location_utils').locationToFeature; +var geoJsonUtils = require('../../lib/geojson_utils'); var arrayToCalcItem = require('../../lib/array_to_calc_item'); - -var Color = require('../../components/color'); -var Drawing = require('../../components/drawing'); var subTypes = require('../scatter/subtypes'); -var attributes = require('./attributes'); -var plotScatterGeo = module.exports = {}; +module.exports = function plot(geo, calcData) { + function keyFunc(d) { return d[0].trace.uid; } -plotScatterGeo.calcGeoJSON = function(trace, topojson) { - var cdi = [], - hasLocationData = Array.isArray(trace.locations); + var gScatterGeoTraces = geo.framework.select('.scattergeolayer') + .selectAll('g.trace.scattergeo') + .data(calcData, keyFunc); - var len, features, getLonLat, locations; + gScatterGeoTraces.enter().append('g') + .attr('class', 'trace scattergeo'); - if(hasLocationData) { - locations = trace.locations; - len = locations.length; - features = getTopojsonFeatures(trace, topojson); - getLonLat = function(trace, i) { - var feature = locationToFeature(trace.locationmode, locations[i], features); + gScatterGeoTraces.exit().remove(); - return (feature !== undefined) ? - feature.properties.ct : - undefined; - }; - } - else { - len = trace.lon.length; - getLonLat = function(trace, i) { - return [trace.lon[i], trace.lat[i]]; - }; - } + // TODO find a way to order the inner nodes on update + gScatterGeoTraces.selectAll('*').remove(); - for(var i = 0; i < len; i++) { - var lonlat = getLonLat(trace, i); + gScatterGeoTraces.each(function(calcTrace) { + var s = d3.select(this), + trace = calcTrace[0].trace, + convertToLonLatFn = makeConvertToLonLatFn(trace, geo.topojson); - if(!lonlat) continue; // filter the blank points here + // skip over placeholder traces + if(calcTrace[0].placeholder) s.remove(); - var calcItem = { - lon: lonlat[0], - lat: lonlat[1], - location: hasLocationData ? trace.locations[i] : null - }; + // just like calcTrace but w/o not-found location datum + var _calcTrace = []; - arrayItemToCalcdata(trace, calcItem, i); + for(var i = 0; i < calcTrace.length; i++) { + var _calcPt = convertToLonLatFn(calcTrace[i]); - cdi.push(calcItem); - } + if(_calcPt) { + arrayItemToCalcdata(trace, calcTrace[i], i); + _calcTrace.push(_calcPt); + } + } + + if(subTypes.hasLines(trace) || trace.fill !== 'none') { + var lineCoords = geoJsonUtils.calcTraceToLineCoords(_calcTrace); - if(cdi.length > 0) cdi[0].trace = trace; + var lineData = (trace.fill !== 'none') ? + geoJsonUtils.makePolygon(lineCoords, trace) : + geoJsonUtils.makeLine(lineCoords, trace); - return cdi; + s.selectAll('path.js-line') + .data([lineData]) + .enter().append('path') + .classed('js-line', true); + } + + if(subTypes.hasMarkers(trace)) { + s.selectAll('path.point').data(_calcTrace) + .enter().append('path') + .classed('point', true); + } + + if(subTypes.hasText(trace)) { + s.selectAll('g').data(_calcTrace) + .enter().append('g') + .append('text'); + } + }); + + // call style here within topojson request callback + style(geo); }; -// similar Scatter.arraysToCalcdata but inside a filter loop +function makeConvertToLonLatFn(trace, topojson) { + if(!Array.isArray(trace.locations)) return Lib.identity; + + var features = getTopojsonFeatures(trace, topojson), + locationmode = trace.locationmode; + + return function(calcPt) { + var feature = locationToFeature(locationmode, calcPt.loc, features); + + if(feature) { + calcPt.lonlat = feature.properties.ct; + return calcPt; + } + else { + // mutate gd.calcdata so that hoverPoints knows to skip this datum + calcPt.lonlat = [null, null]; + return false; + } + }; +} + function arrayItemToCalcdata(trace, calcItem, i) { var marker = trace.marker; @@ -100,207 +135,36 @@ function arrayItemToCalcdata(trace, calcItem, i) { } } -function makeLineGeoJSON(trace) { - var N = trace.lon.length, - coordinates = new Array(N); - - for(var i = 0; i < N; i++) { - coordinates[i] = [trace.lon[i], trace.lat[i]]; - } - - return { - type: 'LineString', - coordinates: coordinates, - trace: trace - }; -} - -plotScatterGeo.plot = function(geo, calcData) { - function keyFunc(d) { - return d[0].trace.uid; - } - - var gScatterGeoTraces = geo.framework.select('.scattergeolayer') - .selectAll('g.trace.scattergeo') - .data(calcData, keyFunc); - - gScatterGeoTraces.enter().append('g') - .attr('class', 'trace scattergeo'); - - gScatterGeoTraces.exit().remove(); - - // TODO find a way to order the inner nodes on update - gScatterGeoTraces.selectAll('*').remove(); - - gScatterGeoTraces.each(function(calcTrace) { - var s = d3.select(this), - trace = calcTrace[0].trace; - - if(!subTypes.hasLines(trace)) return; - - s.selectAll('path.js-line') - .data([makeLineGeoJSON(trace)]) - .enter().append('path') - .classed('js-line', true); - - // TODO add hover - how? - }); - - gScatterGeoTraces.each(function(calcTrace) { - var s = d3.select(this), - trace = calcTrace[0].trace, - showMarkers = subTypes.hasMarkers(trace), - showText = subTypes.hasText(trace); - - if(!showMarkers && !showText) return; - - var cdi = plotScatterGeo.calcGeoJSON(trace, geo.topojson), - cleanHoverLabelsFunc = makeCleanHoverLabelsFunc(geo, trace), - eventDataFunc = makeEventDataFunc(trace); - - var hoverinfo = trace.hoverinfo, - hasNameLabel = ( - hoverinfo === 'all' || - hoverinfo.indexOf('name') !== -1 - ); - - // keep ref to event data in this scope for plotly_unhover - var eventData = null; - - function handleMouseOver(pt, ptIndex) { - if(!geo.showHover) return; - - var xy = geo.projection([pt.lon, pt.lat]); - cleanHoverLabelsFunc(pt); - - Fx.loneHover({ - x: xy[0], - y: xy[1], - name: hasNameLabel ? trace.name : undefined, - text: pt.textLabel, - color: pt.mc || (trace.marker || {}).color - }, { - container: geo.hoverContainer.node() - }); - - eventData = eventDataFunc(pt, ptIndex); - - geo.graphDiv.emit('plotly_hover', eventData); - } - - function handleClick(pt, ptIndex) { - geo.graphDiv.emit('plotly_click', eventDataFunc(pt, ptIndex)); - } - - if(showMarkers) { - s.selectAll('path.point').data(cdi) - .enter().append('path') - .classed('point', true) - .on('mouseover', handleMouseOver) - .on('click', handleClick) - .on('mouseout', function() { - Fx.loneUnhover(geo.hoverContainer); - - geo.graphDiv.emit('plotly_unhover', eventData); - }) - .on('mousedown', function() { - // to simulate the 'zoomon' event - Fx.loneUnhover(geo.hoverContainer); - }) - .on('mouseup', handleMouseOver); // ~ 'zoomend' - } - - if(showText) { - s.selectAll('g').data(cdi) - .enter().append('g') - .append('text'); - } - }); - - plotScatterGeo.style(geo); -}; - -plotScatterGeo.style = function(geo) { +function style(geo) { var selection = geo.framework.selectAll('g.trace.scattergeo'); - selection.style('opacity', function(trace) { - return trace.opacity; + selection.style('opacity', function(calcTrace) { + return calcTrace[0].trace.opacity; }); selection.each(function(calcTrace) { - var trace = calcTrace[0].trace; + var trace = calcTrace[0].trace, + group = d3.select(this); - d3.select(this).selectAll('path.point') + group.selectAll('path.point') .call(Drawing.pointStyle, trace); - d3.select(this).selectAll('text') + group.selectAll('text') .call(Drawing.textPointStyle, trace); }); - // GeoJSON calc data is incompatible with Drawing.lineGroupStyle + // this part is incompatible with Drawing.lineGroupStyle selection.selectAll('path.js-line') .style('fill', 'none') .each(function(d) { - var trace = d.trace, + var path = d3.select(this), + trace = d.trace, line = trace.line || {}; - d3.select(this) - .call(Color.stroke, line.color) + path.call(Color.stroke, line.color) .call(Drawing.dashLine, line.dash || '', line.width || 0); - }); -}; - -function makeCleanHoverLabelsFunc(geo, trace) { - var hoverinfo = trace.hoverinfo; - if(hoverinfo === 'none') { - return function cleanHoverLabelsFunc(d) { delete d.textLabel; }; - } - - var hoverinfoParts = (hoverinfo === 'all') ? - attributes.hoverinfo.flags : - hoverinfo.split('+'); - - var hasLocation = ( - hoverinfoParts.indexOf('location') !== -1 && - Array.isArray(trace.locations) - ), - hasLon = (hoverinfoParts.indexOf('lon') !== -1), - hasLat = (hoverinfoParts.indexOf('lat') !== -1), - hasText = (hoverinfoParts.indexOf('text') !== -1); - - function formatter(val) { - var axis = geo.mockAxis; - return Axes.tickText(axis, axis.c2l(val), 'hover').text + '\u00B0'; - } - - return function cleanHoverLabelsFunc(pt) { - var thisText = []; - - if(hasLocation) thisText.push(pt.location); - else if(hasLon && hasLat) { - thisText.push('(' + formatter(pt.lon) + ', ' + formatter(pt.lat) + ')'); - } - else if(hasLon) thisText.push('lon: ' + formatter(pt.lon)); - else if(hasLat) thisText.push('lat: ' + formatter(pt.lat)); - - if(hasText) thisText.push(pt.tx || trace.text); - - pt.textLabel = thisText.join('
'); - }; -} - -function makeEventDataFunc(trace) { - var hasLocation = Array.isArray(trace.locations); - - return function(pt, ptIndex) { - return {points: [{ - data: trace._input, - fullData: trace, - curveNumber: trace.index, - pointNumber: ptIndex, - lon: pt.lon, - lat: pt.lat, - location: hasLocation ? pt.location : null - }]}; - }; + if(trace.fill !== 'none') { + path.call(Color.fill, trace.fillcolor); + } + }); } diff --git a/src/traces/scattermapbox/attributes.js b/src/traces/scattermapbox/attributes.js index c66c259e809..a4fdd03e1de 100644 --- a/src/traces/scattermapbox/attributes.js +++ b/src/traces/scattermapbox/attributes.js @@ -91,18 +91,7 @@ module.exports = { // line }, - fill: { - valType: 'enumerated', - values: ['none', 'toself'], - dflt: 'none', - role: 'style', - description: [ - 'Sets the area to fill with a solid color.', - 'Use with `fillcolor` if not *none*.', - '*toself* connects the endpoints of the trace (or each segment', - 'of the trace if it has gaps) into a closed shape.' - ].join(' ') - }, + fill: scatterGeoAttrs.fill, fillcolor: scatterAttrs.fillcolor, textfont: mapboxAttrs.layers.symbol.textfont, From 5be0e271eeaf4d42af71ff721bac045cf821e71c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:27:17 -0400 Subject: [PATCH 10/14] geo: make scattergeo use Fx.hover for hover / click interactions - make Fx.hover pass subplot info to hoverPoints module - add scattergeo hoverPoints and eventData modules - mock xaxis and yaxis in geo instances - factor out is-over-edge logic to use it in hoverPoints - use 'mousemove' instead of 'mouseover' in test to trigger hover --- src/plots/cartesian/graph_interact.js | 19 +++-- src/plots/geo/geo.js | 80 ++++++++++++++---- src/traces/scattergeo/event_data.js | 19 +++++ src/traces/scattergeo/hover.js | 105 ++++++++++++++++++++++++ src/traces/scattergeo/index.js | 2 + test/jasmine/tests/geo_interact_test.js | 60 ++++++++++++-- 6 files changed, 256 insertions(+), 29 deletions(-) create mode 100644 src/traces/scattergeo/event_data.js create mode 100644 src/traces/scattergeo/hover.js diff --git a/src/plots/cartesian/graph_interact.js b/src/plots/cartesian/graph_interact.js index 4bfbd88ecd1..0907513d199 100644 --- a/src/plots/cartesian/graph_interact.js +++ b/src/plots/cartesian/graph_interact.js @@ -379,6 +379,7 @@ function hover(gd, evt, subplot) { curvenum, cd, trace, + subplotId, subploti, mode, xval, @@ -468,7 +469,8 @@ function hover(gd, evt, subplot) { if(!cd || !cd[0] || !cd[0].trace || cd[0].trace.visible !== true) continue; trace = cd[0].trace; - subploti = subplots.indexOf(getSubplot(trace)); + subplotId = getSubplot(trace); + subploti = subplots.indexOf(subplotId); // within one trace mode can sometimes be overridden mode = hovermode; @@ -495,6 +497,11 @@ function hover(gd, evt, subplot) { text: undefined }; + // add ref to subplot object (non-cartesian case) + if(fullLayout[subplotId]) { + pointData.subplot = fullLayout[subplotId]._subplot; + } + closedataPreviousLength = hoverData.length; // for a highlighting array, figure out what @@ -545,7 +552,6 @@ function hover(gd, evt, subplot) { hoverData.splice(0, closedataPreviousLength); distance = hoverData[0].distance; } - } // nothing left: remove all labels and quit @@ -608,14 +614,10 @@ function hover(gd, evt, subplot) { if(!hoverChanged(gd, evt, oldhoverdata)) return; - /* Emit the custom hover handler. Bind this like: - * gd.on('hover.plotly', function(extras) { - * // do something with extras.data - * }); - */ if(oldhoverdata) { gd.emit('plotly_unhover', { points: oldhoverdata }); } + gd.emit('plotly_hover', { points: gd._hoverdata, xaxes: xaArray, @@ -628,7 +630,7 @@ function hover(gd, evt, subplot) { // look for either .subplot (currently just ternary) // or xaxis and yaxis attributes function getSubplot(trace) { - return trace.subplot || (trace.xaxis + trace.yaxis); + return trace.subplot || (trace.xaxis + trace.yaxis) || trace.geo; } fx.getDistanceFunction = function(mode, dx, dy, dxy) { @@ -732,6 +734,7 @@ function cleanPoint(d, hovermode) { if(infomode.indexOf('text') === -1) d.text = undefined; if(infomode.indexOf('name') === -1) d.name = undefined; } + return d; } diff --git a/src/plots/geo/geo.js b/src/plots/geo/geo.js index 9eea76e582a..91dfd67c461 100644 --- a/src/plots/geo/geo.js +++ b/src/plots/geo/geo.js @@ -16,6 +16,7 @@ var d3 = require('d3'); var Color = require('../../components/color'); var Drawing = require('../../components/drawing'); var Axes = require('../../plots/cartesian/axes'); +var Fx = require('../../plots/cartesian/graph_interact'); var addProjectionsToD3 = require('./projections'); var createGeoScale = require('./set_scale'); @@ -32,7 +33,6 @@ addProjectionsToD3(d3); function Geo(options, fullLayout) { - this.id = options.id; this.graphDiv = options.graphDiv; this.container = options.container; @@ -53,6 +53,9 @@ function Geo(options, fullLayout) { this.zoom = null; this.zoomReset = null; + this.xaxis = null; + this.yaxis = null; + this.makeFramework(); this.updateFx(fullLayout.hovermode); @@ -88,6 +91,30 @@ proto.plot = function(geoCalcData, fullLayout, promises) { .call(_this.zoom) .on('dblclick.zoom', _this.zoomReset); + _this.framework.on('mousemove', function() { + var mouse = d3.mouse(this), + lonlat = _this.projection.invert(mouse); + + if(isNaN(lonlat[0]) || isNaN(lonlat[1])) return; + + var evt = { + target: true, + xpx: mouse[0], + ypx: mouse[1] + }; + + _this.xaxis.c2p = function() { return mouse[0]; }; + _this.xaxis.p2c = function() { return lonlat[0]; }; + _this.yaxis.c2p = function() { return mouse[1]; }; + _this.yaxis.p2c = function() { return lonlat[1]; }; + + Fx.hover(_this.graphDiv, evt, _this.id); + }); + + _this.framework.on('click', function() { + Fx.click(_this.graphDiv, { target: true }); + }); + topojsonNameNew = topojsonUtils.getTopojsonName(geoLayout); if(_this.topojson === null || topojsonNameNew !== _this.topojsonName) { @@ -265,6 +292,8 @@ proto.makeFramework = function() { .attr('id', this.id) .style('position', 'absolute'); + // only choropleth traces use this, + // scattergeo traces use Fx.hover and fullLayout._hoverlayer var hoverContainer = this.hoverContainer = geoDiv.append('svg'); hoverContainer .attr(xmlnsNamespaces.svgAttrs) @@ -294,14 +323,20 @@ proto.makeFramework = function() { framework.on('dblclick.zoom', null); // TODO use clip paths instead of nested SVG + + this.xaxis = { _id: 'x' }; + this.yaxis = { _id: 'y' }; }; proto.adjustLayout = function(geoLayout, graphSize) { var domain = geoLayout.domain; + var left = graphSize.l + graphSize.w * domain.x[0] + geoLayout._marginX, + top = graphSize.t + graphSize.h * (1 - domain.y[1]) + geoLayout._marginY; + this.geoDiv.style({ - left: graphSize.l + graphSize.w * domain.x[0] + geoLayout._marginX + 'px', - top: graphSize.t + graphSize.h * (1 - domain.y[1]) + geoLayout._marginY + 'px', + left: left + 'px', + top: top + 'px', width: geoLayout._width + 'px', height: geoLayout._height + 'px' }); @@ -322,6 +357,12 @@ proto.adjustLayout = function(geoLayout, graphSize) { height: geoLayout._height }) .call(Color.fill, geoLayout.bgcolor); + + this.xaxis._offset = left; + this.xaxis._length = geoLayout._width; + + this.yaxis._offset = top; + this.yaxis._length = geoLayout._height; }; proto.drawTopo = function(selection, layerName, geoLayout) { @@ -445,27 +486,36 @@ proto.styleLayout = function(geoLayout) { } }; +proto.isLonLatOverEdges = function(lonlat) { + var clipAngle = this.clipAngle; + + if(clipAngle === null) return false; + + var p = this.projection.rotate(), + angle = d3.geo.distance(lonlat, [-p[0], -p[1]]), + maxAngle = clipAngle * Math.PI / 180; + + return angle > maxAngle; +}; + // [hot code path] (re)draw all paths which depend on the projection proto.render = function() { - var framework = this.framework, + var _this = this, + framework = _this.framework, gChoropleth = framework.select('g.choroplethlayer'), gScatterGeo = framework.select('g.scattergeolayer'), - projection = this.projection, - path = this.path, - clipAngle = this.clipAngle; + path = _this.path; function translatePoints(d) { - var lonlat = projection([d.lon, d.lat]); - if(!lonlat) return null; - return 'translate(' + lonlat[0] + ',' + lonlat[1] + ')'; + var lonlatPx = _this.projection(d.lonlat); + if(!lonlatPx) return null; + + return 'translate(' + lonlatPx[0] + ',' + lonlatPx[1] + ')'; } // hide paths over edges of clipped projections function hideShowPoints(d) { - var p = projection.rotate(), - angle = d3.geo.distance([d.lon, d.lat], [-p[0], -p[1]]), - maxAngle = clipAngle * Math.PI / 180; - return (angle > maxAngle) ? '0' : '1.0'; + return _this.isLonLatOverEdges(d.lonlat) ? '0' : '1.0'; } framework.selectAll('path.basepath').attr('d', path); @@ -476,7 +526,7 @@ proto.render = function() { gScatterGeo.selectAll('path.js-line').attr('d', path); - if(clipAngle !== null) { + if(_this.clipAngle !== null) { gScatterGeo.selectAll('path.point') .style('opacity', hideShowPoints) .attr('transform', translatePoints); diff --git a/src/traces/scattergeo/event_data.js b/src/traces/scattergeo/event_data.js new file mode 100644 index 00000000000..a3421f95739 --- /dev/null +++ b/src/traces/scattergeo/event_data.js @@ -0,0 +1,19 @@ +/** +* Copyright 2012-2016, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + + +'use strict'; + + +module.exports = function eventData(out, pt) { + out.lon = pt.lon; + out.lat = pt.lat; + out.location = pt.lon ? pt.lon : null; + + return out; +}; diff --git a/src/traces/scattergeo/hover.js b/src/traces/scattergeo/hover.js new file mode 100644 index 00000000000..97ab4a1c606 --- /dev/null +++ b/src/traces/scattergeo/hover.js @@ -0,0 +1,105 @@ +/** +* Copyright 2012-2016, Plotly, Inc. +* All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. +*/ + + +'use strict'; + +var Fx = require('../../plots/cartesian/graph_interact'); +var Axes = require('../../plots/cartesian/axes'); + +var getTraceColor = require('../scatter/get_trace_color'); +var attributes = require('./attributes'); + + +module.exports = function hoverPoints(pointData) { + var cd = pointData.cd, + trace = cd[0].trace, + xa = pointData.xa, + ya = pointData.ya, + geo = pointData.subplot; + + if(cd[0].placeholder) return; + + function c2p(lonlat) { + return geo.projection(lonlat); + } + + function distFn(d) { + var lonlat = d.lonlat; + + // this handles the not-found location feature case + if(lonlat[0] === null || lonlat[1] === null) return Infinity; + + if(geo.isLonLatOverEdges(lonlat)) return Infinity; + + var pos = c2p(lonlat); + + var xPx = xa.c2p(), + yPx = ya.c2p(); + + var dx = Math.abs(xPx - pos[0]), + dy = Math.abs(yPx - pos[1]), + rad = Math.max(3, d.mrc || 0); + + return Math.max(Math.sqrt(dx * dx + dy * dy) - rad, 1 - 3 / rad); + } + + Fx.getClosest(cd, distFn, pointData); + + // skip the rest (for this trace) if we didn't find a close point + if(pointData.index === false) return; + + var di = cd[pointData.index], + lonlat = di.lonlat, + pos = c2p(lonlat), + rad = di.mrc || 1; + + pointData.x0 = pos[0] - rad; + pointData.x1 = pos[0] + rad; + pointData.y0 = pos[1] - rad; + pointData.y1 = pos[1] + rad; + + pointData.loc = di.loc; + pointData.lat = lonlat[0]; + pointData.lon = lonlat[1]; + + pointData.color = getTraceColor(trace, di); + pointData.extraText = getExtraText(trace, di, geo.mockAxis); + + return [pointData]; +}; + +function getExtraText(trace, pt, axis) { + var hoverinfo = trace.hoverinfo; + + var parts = (hoverinfo === 'all') ? + attributes.hoverinfo.flags : + hoverinfo.split('+'); + + var hasLocation = parts.indexOf('location') !== -1 && Array.isArray(trace.locations), + hasLon = (parts.indexOf('lon') !== -1), + hasLat = (parts.indexOf('lat') !== -1), + hasText = (parts.indexOf('text') !== -1); + + var text = []; + + function format(val) { + return Axes.tickText(axis, axis.c2l(val), 'hover').text + '\u00B0'; + } + + if(hasLocation) text.push(pt.loc); + else if(hasLon && hasLat) { + text.push('(' + format(pt.lonlat[0]) + ', ' + format(pt.lonlat[1]) + ')'); + } + else if(hasLon) text.push('lon: ' + format(pt.lonlat[0])); + else if(hasLat) text.push('lat: ' + format(pt.lonlat[1])); + + if(hasText) text.push(pt.tx || trace.text); + + return text.join('
'); +} diff --git a/src/traces/scattergeo/index.js b/src/traces/scattergeo/index.js index a3ad24f2285..b8c441f6d1d 100644 --- a/src/traces/scattergeo/index.js +++ b/src/traces/scattergeo/index.js @@ -16,6 +16,8 @@ ScatterGeo.supplyDefaults = require('./defaults'); ScatterGeo.colorbar = require('../scatter/colorbar'); ScatterGeo.calc = require('./calc'); ScatterGeo.plot = require('./plot'); +ScatterGeo.hoverPoints = require('./hover'); +ScatterGeo.eventData = require('./event_data'); ScatterGeo.moduleType = 'trace'; ScatterGeo.name = 'scattergeo'; diff --git a/test/jasmine/tests/geo_interact_test.js b/test/jasmine/tests/geo_interact_test.js index 153ec79e9fe..1a709a1ce4f 100644 --- a/test/jasmine/tests/geo_interact_test.js +++ b/test/jasmine/tests/geo_interact_test.js @@ -7,6 +7,8 @@ var createGraphDiv = require('../assets/create_graph_div'); var destroyGraphDiv = require('../assets/destroy_graph_div'); var mouseEvent = require('../assets/mouse_event'); +var HOVERMINTIME = require('@src/plots/cartesian/constants').HOVERMINTIME; + describe('Test geo interactions', function() { 'use strict'; @@ -47,7 +49,7 @@ describe('Test geo interactions', function() { describe('scattergeo hover labels', function() { beforeEach(function() { - mouseEventScatterGeo('mouseover'); + mouseEventScatterGeo('mousemove'); }); it('should show one hover text group', function() { @@ -68,14 +70,17 @@ describe('Test geo interactions', function() { }); describe('scattergeo hover events', function() { - var ptData; + var ptData, cnt; beforeEach(function() { + cnt = 0; + gd.on('plotly_hover', function(eventData) { ptData = eventData.points[0]; + cnt++; }); - mouseEventScatterGeo('mouseover'); + mouseEventScatterGeo('mousemove'); }); it('should contain the correct fields', function() { @@ -83,6 +88,7 @@ describe('Test geo interactions', function() { 'data', 'fullData', 'curveNumber', 'pointNumber', 'lon', 'lat', 'location' ]); + expect(cnt).toEqual(1); }); it('should show the correct point data', function() { @@ -91,6 +97,39 @@ describe('Test geo interactions', function() { expect(ptData.location).toBe(null); expect(ptData.curveNumber).toEqual(0); expect(ptData.pointNumber).toEqual(0); + expect(cnt).toEqual(1); + }); + + it('should not be triggered when pt over on the other side of the globe', function(done) { + var update = { + 'geo.projection.type': 'orthographic', + 'geo.projection.rotation': { lon: 82, lat: -19 } + }; + + Plotly.relayout(gd, update).then(function() { + setTimeout(function() { + mouseEvent('mousemove', 288, 170); + + expect(cnt).toEqual(1); + + done(); + }, HOVERMINTIME + 10); + }); + }); + + it('should not be triggered when pt *location* does not have matching feature', function(done) { + var update = { + 'locations': [['CAN', 'AAA', 'USA']] + }; + + Plotly.restyle(gd, update).then(function() { + setTimeout(function() { mouseEvent('mousemove', 300, 230); + + expect(cnt).toEqual(1); + + done(); + }, HOVERMINTIME + 10); + }); }); }); @@ -102,6 +141,7 @@ describe('Test geo interactions', function() { ptData = eventData.points[0]; }); + mouseEventScatterGeo('mousemove'); mouseEventScatterGeo('click'); }); @@ -124,13 +164,16 @@ describe('Test geo interactions', function() { describe('scattergeo unhover events', function() { var ptData; - beforeEach(function() { + beforeEach(function(done) { gd.on('plotly_unhover', function(eventData) { ptData = eventData.points[0]; }); - mouseEventScatterGeo('mouseover'); - mouseEventScatterGeo('mouseout'); + mouseEventScatterGeo('mousemove'); + setTimeout(function() { + mouseEvent('mousemove', 400, 200); + done(); + }, HOVERMINTIME + 10); }); it('should contain the correct fields', function() { @@ -419,6 +462,7 @@ describe('Test geo interactions', function() { done(); } + gd.calcdata = undefined; Plotly.plot(gd); i++; }, INTERVAL); @@ -449,6 +493,7 @@ describe('Test geo interactions', function() { done(); } + gd.calcdata = undefined; Plotly.plot(gd); i++; }, INTERVAL); @@ -479,6 +524,7 @@ describe('Test geo interactions', function() { done(); } + gd.calcdata = undefined; Plotly.plot(gd); i++; }, INTERVAL); @@ -493,6 +539,7 @@ describe('Test geo interactions', function() { var trace1 = gd.data[1]; trace1.locations.shift(); + gd.calcdata = undefined; Plotly.plot(gd).then(function() { expect(countTraces('scattergeo')).toBe(1); expect(countTraces('choropleth')).toBe(1); @@ -519,6 +566,7 @@ describe('Test geo interactions', function() { trace1.locations = locationsQueue; trace1.z = zQueue; + gd.calcdata = undefined; Plotly.plot(gd).then(function() { expect(countTraces('scattergeo')).toBe(1); expect(countTraces('choropleth')).toBe(1); From 7e1c66eff95811e12ed1e922677c53d5c5598d11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:28:02 -0400 Subject: [PATCH 11/14] choropleth: add dummy hover handler to skip Fx.hover w/o warnings - until we make choropleth use fullLayout._hoverlayer for its hover labels. --- src/traces/choropleth/index.js | 3 +++ src/traces/choropleth/plot.js | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/traces/choropleth/index.js b/src/traces/choropleth/index.js index e782d6d0144..31cb74393e7 100644 --- a/src/traces/choropleth/index.js +++ b/src/traces/choropleth/index.js @@ -17,6 +17,9 @@ Choropleth.colorbar = require('../heatmap/colorbar'); Choropleth.calc = require('./calc'); Choropleth.plot = require('./plot').plot; +// add dummy hover handler to skip Fx.hover w/o warnings +Choropleth.hoverPoints = function() {}; + Choropleth.moduleType = 'trace'; Choropleth.name = 'choropleth'; Choropleth.basePlotModule = require('../../plots/geo'); diff --git a/src/traces/choropleth/plot.js b/src/traces/choropleth/plot.js index e9bbfa05266..2fac6ea4e06 100644 --- a/src/traces/choropleth/plot.js +++ b/src/traces/choropleth/plot.js @@ -59,9 +59,8 @@ plotChoropleth.calcGeoJSON = function(trace, topojson) { }; plotChoropleth.plot = function(geo, calcData, geoLayout) { - function keyFunc(d) { - return d[0].trace.uid; - } + + function keyFunc(d) { return d[0].trace.uid; } var framework = geo.framework, gChoropleth = framework.select('g.choroplethlayer'), From 8d40b3870db5b10dce9feae28a229a2a72437608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:28:47 -0400 Subject: [PATCH 12/14] test: fix geo_legendonly baseline - the first legend item is now correct! --- test/image/baselines/geo_legendonly.png | Bin 75959 -> 75745 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/geo_legendonly.png b/test/image/baselines/geo_legendonly.png index 0d74a4a40ba6315e503ae15d8ba6420c568250fa..658fe60eb7d3a110f967ddffbfb05643164a516e 100644 GIT binary patch literal 75745 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 literal 75959 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 From 7498fe6d637ce3de83647fd7f4c4fec404be69ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 4 Oct 2016 17:29:06 -0400 Subject: [PATCH 13/14] test: add mocks for 'scattergeo' connectgaps and fill --- test/image/baselines/geo_connectgaps.png | Bin 0 -> 48310 bytes test/image/baselines/geo_fill.png | Bin 0 -> 29524 bytes test/image/mocks/geo_connectgaps.json | 59 ++++++++++++ test/image/mocks/geo_fill.json | 109 +++++++++++++++++++++++ 4 files changed, 168 insertions(+) create mode 100644 test/image/baselines/geo_connectgaps.png create mode 100644 test/image/baselines/geo_fill.png create mode 100644 test/image/mocks/geo_connectgaps.json create mode 100644 test/image/mocks/geo_fill.json diff --git a/test/image/baselines/geo_connectgaps.png b/test/image/baselines/geo_connectgaps.png new file mode 100644 index 0000000000000000000000000000000000000000..a33c521dcdd0dcacbe592ac982ec76f59ab71d28 GIT binary patch literal 48310 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 NnyPv#l}dLb{|6VsTC4y7 literal 0 HcmV?d00001 diff --git a/test/image/baselines/geo_fill.png b/test/image/baselines/geo_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..c3941d6d1afe7c592d6e5bf02fe2109fe7227400 GIT binary patch literal 29524 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 Date: Wed, 5 Oct 2016 18:41:45 -0400 Subject: [PATCH 14/14] doc: expand comment about placeholder calc point --- src/plots/plots.js | 5 ++++- src/traces/scattergeo/hover.js | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/plots/plots.js b/src/plots/plots.js index e79bf9e07b2..6adf9c92d7a 100644 --- a/src/plots/plots.js +++ b/src/plots/plots.js @@ -1670,9 +1670,12 @@ plots.doCalcdata = function(gd, traces) { } // Make sure there is a first point. + // // This ensures there is a calcdata item for every trace, // even if cartesian logic doesn't handle it (for things like legends). - // Tag this artificial calc point with 'placeholder: true' + // + // Tag this artificial calc point with 'placeholder: true', + // to make it easier to skip over them in during the plot and hover step. if(!Array.isArray(cd) || !cd[0]) { cd = [{x: false, y: false, placeholder: true}]; } diff --git a/src/traces/scattergeo/hover.js b/src/traces/scattergeo/hover.js index 97ab4a1c606..200717080b8 100644 --- a/src/traces/scattergeo/hover.js +++ b/src/traces/scattergeo/hover.js @@ -46,6 +46,9 @@ module.exports = function hoverPoints(pointData) { dy = Math.abs(yPx - pos[1]), rad = Math.max(3, d.mrc || 0); + // N.B. d.mrc is the calculated marker radius + // which is only set for trace with 'markers' mode. + return Math.max(Math.sqrt(dx * dx + dy * dy) - rad, 1 - 3 / rad); }