diff --git a/src/components/fx/attributes.js b/src/components/fx/attributes.js index a2548f9eccd..c4b49a3d55b 100644 --- a/src/components/fx/attributes.js +++ b/src/components/fx/attributes.js @@ -21,6 +21,7 @@ module.exports = { }), align: extendFlat({}, hoverLabelAttrs.align, {arrayOk: true}), namelength: extendFlat({}, hoverLabelAttrs.namelength, {arrayOk: true}), + showarrow: extendFlat({}, hoverLabelAttrs.showarrow, {arrayOk: true}), editType: 'none' } }; diff --git a/src/components/fx/calc.js b/src/components/fx/calc.js index 9854947a42f..5934a57efaf 100644 --- a/src/components/fx/calc.js +++ b/src/components/fx/calc.js @@ -40,6 +40,7 @@ module.exports = function calc(gd) { fillFn(trace.hoverlabel.font.variant, cd, 'htv'); fillFn(trace.hoverlabel.namelength, cd, 'hnl'); fillFn(trace.hoverlabel.align, cd, 'hta'); + fillFn(trace.hoverlabel.showarrow, cd, 'htsa'); } }; diff --git a/src/components/fx/hover.js b/src/components/fx/hover.js index 80fc4a07cf3..0796e1ea75c 100644 --- a/src/components/fx/hover.js +++ b/src/components/fx/hover.js @@ -1922,20 +1922,28 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) { var offsetY = offsets.y; var isMiddle = anchor === 'middle'; + var showArrow = d.trace.hoverlabel?.showarrow; - g.select('path') - .attr('d', isMiddle ? + var pathStr; + if(isMiddle) { // middle aligned: rect centered on data - ('M-' + pX(d.bx / 2 + d.tx2width / 2) + ',' + pY(offsetY - d.by / 2) + - 'h' + pX(d.bx) + 'v' + pY(d.by) + 'h-' + pX(d.bx) + 'Z') : + pathStr = 'M-' + pX(d.bx / 2 + d.tx2width / 2) + ',' + pY(offsetY - d.by / 2) + + 'h' + pX(d.bx) + 'v' + pY(d.by) + 'h-' + pX(d.bx) + 'Z'; + } else if(showArrow !== false) { // left or right aligned: side rect with arrow to data - ('M0,0L' + pX(horzSign * HOVERARROWSIZE + offsetX) + ',' + pY(HOVERARROWSIZE + offsetY) + - 'v' + pY(d.by / 2 - HOVERARROWSIZE) + - 'h' + pX(horzSign * d.bx) + - 'v-' + pY(d.by) + - 'H' + pX(horzSign * HOVERARROWSIZE + offsetX) + - 'V' + pY(offsetY - HOVERARROWSIZE) + - 'Z')); + pathStr = 'M0,0L' + pX(horzSign * HOVERARROWSIZE + offsetX) + ',' + pY(HOVERARROWSIZE + offsetY) + + 'v' + pY(d.by / 2 - HOVERARROWSIZE) + + 'h' + pX(horzSign * d.bx) + + 'v-' + pY(d.by) + + 'H' + pX(horzSign * HOVERARROWSIZE + offsetX) + + 'V' + pY(offsetY - HOVERARROWSIZE) + + 'Z'; + } else { + // left or right aligned: side rect without arrow + pathStr = 'M' + pX(horzSign * HOVERARROWSIZE + offsetX) + ',' + pY(offsetY - d.by / 2) + + 'h' + pX(horzSign * d.bx) + 'v' + pY(d.by) + 'h' + pX(-horzSign * d.bx) + 'Z'; + } + g.select('path').attr('d', pathStr); var posX = offsetX + shiftX.textShiftX; var posY = offsetY + d.ty0 - d.by / 2 + HOVERTEXTPAD; diff --git a/src/components/fx/hoverlabel_defaults.js b/src/components/fx/hoverlabel_defaults.js index 043758e740a..0a0b87ac5c3 100644 --- a/src/components/fx/hoverlabel_defaults.js +++ b/src/components/fx/hoverlabel_defaults.js @@ -36,6 +36,7 @@ module.exports = function handleHoverLabelDefaults(contIn, contOut, coerce, opts coerce('hoverlabel.bgcolor', opts.bgcolor); coerce('hoverlabel.bordercolor', opts.bordercolor); coerce('hoverlabel.namelength', opts.namelength); + coerce('hoverlabel.showarrow', opts.showarrow); Lib.coerceFont(coerce, 'hoverlabel.font', opts.font); coerce('hoverlabel.align', opts.align); }; diff --git a/src/components/fx/layout_attributes.js b/src/components/fx/layout_attributes.js index 0cb8750605b..825b02af289 100644 --- a/src/components/fx/layout_attributes.js +++ b/src/components/fx/layout_attributes.js @@ -165,6 +165,15 @@ module.exports = { '`namelength - 3` characters and add an ellipsis.' ].join(' ') }, + showarrow: { + valType: 'boolean', + dflt: true, + editType: 'none', + description: [ + 'Sets whether or not to show the hover label arrow/triangle', + 'pointing to the data point.' + ].join(' ') + }, editType: 'none' }, diff --git a/test/jasmine/tests/fx_test.js b/test/jasmine/tests/fx_test.js index 3f757713445..d123999e265 100644 --- a/test/jasmine/tests/fx_test.js +++ b/test/jasmine/tests/fx_test.js @@ -179,7 +179,8 @@ describe('Fx defaults', function() { shadow: 'auto', }, align: 'auto', - namelength: 15 + namelength: 15, + showarrow: true, }); expect(out.data[1].hoverlabel).toEqual({ @@ -197,7 +198,8 @@ describe('Fx defaults', function() { shadow: 'auto', }, align: 'auto', - namelength: 15 + namelength: 15, + showarrow: true, }); expect(out.layout.annotations[0].hoverlabel).toEqual({ diff --git a/test/jasmine/tests/hover_label_test.js b/test/jasmine/tests/hover_label_test.js index a9af59100c0..d89f482f9b1 100644 --- a/test/jasmine/tests/hover_label_test.js +++ b/test/jasmine/tests/hover_label_test.js @@ -7038,3 +7038,100 @@ describe('hover on traces with (x|y)hoverformat', function() { .then(done, done.fail); }); }); + +describe('hoverlabel.showarrow', function() { + 'use strict'; + + var gd; + + beforeEach(function() { + gd = createGraphDiv(); + }); + + afterEach(destroyGraphDiv); + + function _hover(x, y) { + mouseEvent('mousemove', x, y); + Lib.clearThrottle(); + } + + function getHoverPath() { + var hoverLabels = d3SelectAll('g.hovertext'); + if (hoverLabels.size() === 0) return null; + return hoverLabels.select('path').attr('d'); + } + + it('should show hover arrow by default', function(done) { + Plotly.newPlot(gd, [{ + x: [1, 2, 3], + y: [1, 2, 1], + type: 'scatter', + mode: 'markers' + }], { + width: 400, + height: 400, + margin: {l: 50, t: 50, r: 50, b: 50} + }) + .then(function() { + _hover(200, 70); // Hover over middle point + }) + .then(delay(HOVERMINTIME * 1.1)) + .then(function() { + var pathD = getHoverPath(); + expect(pathD).not.toBeNull('hover path should exist'); + // Arrow paths contain 'L' commands starting from 0,0 + expect(pathD).toMatch(/^M0,0L/, 'path should contain arrow (L command from 0,0)'); + }) + .then(done, done.fail); + }); + + it('should hide hover arrow when showarrow is false', function(done) { + Plotly.newPlot(gd, [{ + x: [1, 2, 3], + y: [1, 2, 1], + type: 'scatter', + mode: 'markers' + }], { + width: 400, + height: 400, + margin: {l: 50, t: 50, r: 50, b: 50}, + hoverlabel: { showarrow: false } + }) + .then(function() { + _hover(200, 70); // Hover over middle point + }) + .then(delay(HOVERMINTIME * 1.1)) + .then(function() { + var pathD = getHoverPath(); + expect(pathD).not.toBeNull('hover path should exist'); + // No-arrow paths should be simple rectangles (no 'L' commands starting at 0,0)) + expect(pathD).not.toMatch(/^M0,0L/, 'path should not start at 0,0'); + expect(pathD).toMatch(/^M[\d.-]+,[\d.-]+h/, 'path should start with some numeric point and move horizontally'); + }) + .then(done, done.fail); + }); + + it('should work at trace level', function(done) { + Plotly.newPlot(gd, [{ + x: [1, 2, 3], + y: [1, 2, 1], + type: 'scatter', + mode: 'markers', + hoverlabel: { showarrow: false } + }], { + width: 400, + height: 400, + margin: {l: 50, t: 50, r: 50, b: 50} + }) + .then(function() { + _hover(200, 70); // Hover over middle point + }) + .then(delay(HOVERMINTIME * 1.1)) + .then(function() { + var pathD = getHoverPath(); + expect(pathD).not.toBeNull('hover path should exist'); + expect(pathD).not.toMatch(/^M0,0L/, 'trace-level showarrow:false should hide arrow'); + }) + .then(done, done.fail); + }); +}); diff --git a/test/plot-schema.json b/test/plot-schema.json index 5e1c74f3793..9fad9e2c6df 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -3021,7 +3021,13 @@ "min": -1, "valType": "integer" }, - "role": "object" + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + } }, "hovermode": { "description": "Determines the mode of hover interactions. If *closest*, a single hoverlabel will appear for the *closest* point within the `hoverdistance`. If *x* (or *y*), multiple hoverlabels will appear for multiple points at the *closest* x- (or y-) coordinate within the `hoverdistance`, with the caveat that no more than one hoverlabel will appear per trace. If *x unified* (or *y unified*), a single hoverlabel will appear multiple points at the closest x- (or y-) coordinate within the `hoverdistance` with the caveat that no more than one hoverlabel will appear per trace. In this mode, spikelines are enabled by default perpendicular to the specified axis. If false, hover interactions are disabled.", @@ -16767,7 +16773,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -18966,7 +18984,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -20548,7 +20578,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoveron": { "description": "Do the hover effects highlight individual boxes or sample points or both?", @@ -22086,6 +22128,18 @@ "valType": "string" }, "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + }, "split": { "description": "Show hover information (open, close, high, low) in separate labels.", "dflt": false, @@ -25121,7 +25175,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -26402,7 +26468,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -27679,7 +27757,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -28989,7 +29079,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -30550,7 +30652,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoverongaps": { "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the `z` data have hover labels associated with them.", @@ -33373,7 +33487,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -34588,7 +34714,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -35253,7 +35391,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -37281,7 +37431,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -39112,7 +39274,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoverongaps": { "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the `z` data have hover labels associated with them.", @@ -40273,7 +40447,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -42914,7 +43100,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -44604,7 +44802,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -45530,7 +45740,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -47616,7 +47838,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -50142,7 +50376,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -51683,7 +51929,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -52511,6 +52769,18 @@ "valType": "string" }, "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + }, "split": { "description": "Show hover information (open, close, high, low) in separate labels.", "dflt": false, @@ -55966,7 +56236,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -57396,7 +57678,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", @@ -57830,7 +58124,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -58195,7 +58501,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -59070,7 +59388,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoveron": { "description": "Do the hover effects highlight individual points (markers or line points) or do they highlight filled regions? If the fill is *toself* or *tonext* and there are no markers or text, then the default is *fills*, otherwise it is *points*.", @@ -61808,7 +62138,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -64252,7 +64594,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoveron": { "description": "Do the hover effects highlight individual points (markers or line points) or do they highlight filled regions? If the fill is *toself* or *tonext* and there are no markers or text, then the default is *fills*, otherwise it is *points*.", @@ -66536,7 +66890,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -68978,7 +69344,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -71301,7 +71679,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -72838,7 +73228,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -74320,7 +74722,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoveron": { "description": "Do the hover effects highlight individual points (markers or line points) or do they highlight filled regions? If the fill is *toself* or *tonext* and there are no markers or text, then the default is *fills*, otherwise it is *points*.", @@ -76630,7 +77044,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -78774,7 +79200,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoveron": { "description": "Do the hover effects highlight individual points (markers or line points) or do they highlight filled regions? If the fill is *toself* or *tonext* and there are no markers or text, then the default is *fills*, otherwise it is *points*.", @@ -81083,7 +81521,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoveron": { "description": "Do the hover effects highlight individual points (markers or line points) or do they highlight filled regions? If the fill is *toself* or *tonext* and there are no markers or text, then the default is *fills*, otherwise it is *points*.", @@ -83393,7 +83843,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -85989,7 +86451,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -86800,7 +87274,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -89599,7 +90085,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -90914,7 +91412,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "ids": { "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.", @@ -91430,7 +91940,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -93591,7 +94113,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hoveron": { "description": "Do the hover effects highlight individual violins or sample points or the kernel density estimate or any combination of them?", @@ -95705,7 +96239,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true, @@ -96656,7 +97202,19 @@ "editType": "none", "valType": "string" }, - "role": "object" + "role": "object", + "showarrow": { + "arrayOk": true, + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "none", + "valType": "boolean" + }, + "showarrowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `showarrow`.", + "editType": "none", + "valType": "string" + } }, "hovertemplate": { "arrayOk": true,