diff --git a/src/plot_api/plot_api.js b/src/plot_api/plot_api.js index 42db83daa92..13aca86c633 100644 --- a/src/plot_api/plot_api.js +++ b/src/plot_api/plot_api.js @@ -994,6 +994,10 @@ function doCalcdata(gd) { if (!cd[0].t) cd[0].t = {}; cd[0].trace = trace; + if (trace.calcdataOverride) { + cd[0] = _.defaults(trace.calcdataOverride, cd[0]); + } + Plotly.Lib.markTime('done with calcdata for '+i); calcdata[i] = cd; } diff --git a/src/plots/attributes.js b/src/plots/attributes.js index 76ae50f3a93..09f09c33111 100644 --- a/src/plots/attributes.js +++ b/src/plots/attributes.js @@ -69,7 +69,7 @@ module.exports = { hoverinfo: { valType: 'flaglist', role: 'info', - flags: ['x', 'y', 'z', 'text', 'name'], + flags: ['x', 'y', 'z', 'text', 'name', 'xtext'], extras: ['all', 'none'], dflt: 'all', description: 'Determines which trace information appear on hover.' diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index c4a3e8148bd..98bfce813e8 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -1594,7 +1594,7 @@ axes.tickText = function(ax, x, hover){ var first_or_last; if (showAttr===undefined) return true; - if (hover) return showAttr==='none'; + if (hover) return false; // always show tick prefix/suffix on hover, *especially* if showAttr == 'none' first_or_last = { first: ax._tmin, diff --git a/src/plots/cartesian/graph_interact.js b/src/plots/cartesian/graph_interact.js index dbd965b53c3..8b90562d69c 100644 --- a/src/plots/cartesian/graph_interact.js +++ b/src/plots/cartesian/graph_interact.js @@ -629,6 +629,10 @@ function cleanPoint(d, hovermode) { else d.xLabel = '-' + xLabelObj.text; } else d.xLabel = xLabelObj.text; + + if (d.trace.hoverinfo.indexOf("xtext") > -1 && d.text && d.text != "") { + d.xLabel += "
" + d.text + } d.xVal = d.xa.c2d(d.xLabelVal); } diff --git a/src/traces/box/attributes.js b/src/traces/box/attributes.js index 40c33a8e2b0..2ac20d85b40 100644 --- a/src/traces/box/attributes.js +++ b/src/traces/box/attributes.js @@ -171,5 +171,8 @@ module.exports = { description: 'Sets the width (in px) of line bounding the box(es).' } }, + calcdataOverride: { + valType: 'any', + }, fillcolor: scatterAttrs.fillcolor }; diff --git a/src/traces/box/index.js b/src/traces/box/index.js index f5f0f804c83..83b4843361b 100644 --- a/src/traces/box/index.js +++ b/src/traces/box/index.js @@ -65,6 +65,7 @@ boxes.supplyDefaults = function(traceIn, traceOut, defaultColor) { coerce('whiskerwidth'); coerce('boxmean'); + coerce('calcdataOverride'); var outlierColorDflt = Plotly.Lib.coerce2(traceIn, traceOut, boxes.attributes, 'marker.outliercolor'), lineoutliercolor = coerce('marker.line.outliercolor'),