From 2615a702c2919935b6adcc13ee8d9fbeaf4013e2 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 21 Oct 2025 13:56:52 -0700 Subject: [PATCH 01/14] Add scatterquiver trace type --- lib/index-strict.js | 1 + lib/index.js | 1 + lib/scatterquiver.js | 3 + src/traces/scatterquiver/attributes.js | 207 +++ src/traces/scatterquiver/calc.js | 55 + src/traces/scatterquiver/defaults.js | 68 + src/traces/scatterquiver/event_data.js | 10 + src/traces/scatterquiver/hover.js | 75 + src/traces/scatterquiver/index.js | 31 + src/traces/scatterquiver/plot.js | 120 ++ src/traces/scatterquiver/select_points.js | 39 + src/traces/scatterquiver/style.js | 16 + test/plot-schema.json | 1563 +++++++++++++++++++++ 13 files changed, 2189 insertions(+) create mode 100644 lib/scatterquiver.js create mode 100644 src/traces/scatterquiver/attributes.js create mode 100644 src/traces/scatterquiver/calc.js create mode 100644 src/traces/scatterquiver/defaults.js create mode 100644 src/traces/scatterquiver/event_data.js create mode 100644 src/traces/scatterquiver/hover.js create mode 100644 src/traces/scatterquiver/index.js create mode 100644 src/traces/scatterquiver/plot.js create mode 100644 src/traces/scatterquiver/select_points.js create mode 100644 src/traces/scatterquiver/style.js diff --git a/lib/index-strict.js b/lib/index-strict.js index cac9738bff8..8e332c3b56d 100644 --- a/lib/index-strict.js +++ b/lib/index-strict.js @@ -52,6 +52,7 @@ Plotly.register([ require('../src/traces/scatterpolargl/strict'), require('./barpolar'), require('./scattersmith'), + require('./scatterquiver'), // components require('./calendars'), diff --git a/lib/index.js b/lib/index.js index d4cb5bdcc87..d234cfca3ea 100644 --- a/lib/index.js +++ b/lib/index.js @@ -52,6 +52,7 @@ Plotly.register([ require('./scatterpolargl'), require('./barpolar'), require('./scattersmith'), + require('./scatterquiver'), // components require('./calendars'), diff --git a/lib/scatterquiver.js b/lib/scatterquiver.js new file mode 100644 index 00000000000..f3d08677cc2 --- /dev/null +++ b/lib/scatterquiver.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('../src/traces/scatterquiver'); diff --git a/src/traces/scatterquiver/attributes.js b/src/traces/scatterquiver/attributes.js new file mode 100644 index 00000000000..6a72329cee5 --- /dev/null +++ b/src/traces/scatterquiver/attributes.js @@ -0,0 +1,207 @@ +'use strict'; + +var baseAttrs = require('../../plots/attributes'); +var hovertemplateAttrs = require('../../plots/template_attributes').hovertemplateAttrs; +var fontAttrs = require('../../plots/font_attributes'); +var dash = require('../../components/drawing/attributes').dash; + +var extendFlat = require('../../lib/extend').extendFlat; + +var attrs = { + x: { + valType: 'data_array', + editType: 'calc+clearAxisTypes', + anim: true, + description: 'Sets the x coordinates of the arrow locations.' + }, + y: { + valType: 'data_array', + editType: 'calc+clearAxisTypes', + anim: true, + description: 'Sets the y coordinates of the arrow locations.' + }, + u: { + valType: 'data_array', + editType: 'calc', + anim: true, + description: 'Sets the x components of the arrow vectors.' + }, + v: { + valType: 'data_array', + editType: 'calc', + anim: true, + description: 'Sets the y components of the arrow vectors.' + }, + scale: { + valType: 'number', + dflt: 0.1, + min: 0, + max: 1, + editType: 'calc', + description: 'Scales size of the arrows (ideally to avoid overlap). Default = 0.1' + }, + arrow_scale: { + valType: 'number', + dflt: 0.3, + min: 0, + max: 1, + editType: 'calc', + description: 'Value multiplied to length of barb to get length of arrowhead. Default = 0.3' + }, + angle: { + valType: 'number', + dflt: Math.PI / 9, + min: 0, + max: Math.PI / 2, + editType: 'calc', + description: 'Angle of arrowhead in radians. Default = π/9' + }, + scaleratio: { + valType: 'number', + min: 0, + editType: 'calc', + description: 'The ratio between the scale of the y-axis and the scale of the x-axis (scale_y / scale_x). Default = null, the scale ratio is not fixed.' + }, + hoverdistance: { + valType: 'number', + min: -1, + dflt: 20, + editType: 'calc', + description: 'Maximum distance (in pixels) to look for nearby arrows on hover.' + }, + + // Line styling for arrows + line: { + color: { + valType: 'color', + dflt: '#000', + editType: 'style', + description: 'Sets the color of the arrow lines.' + }, + width: { + valType: 'number', + min: 0, + dflt: 1, + editType: 'style', + description: 'Sets the width (in px) of the arrow lines.' + }, + dash: dash, + shape: { + valType: 'enumerated', + values: ['linear', 'spline', 'hv', 'vh', 'hvh', 'vhv'], + dflt: 'linear', + editType: 'plot', + description: 'Determines the line shape.' + }, + smoothing: { + valType: 'number', + min: 0, + max: 1.3, + dflt: 1, + editType: 'plot', + description: 'Has an effect only if `shape` is set to *spline*. Sets the amount of smoothing.' + }, + simplify: { + valType: 'boolean', + dflt: true, + editType: 'plot', + description: 'Simplifies lines by removing nearly-overlapping points.' + }, + editType: 'style' + }, + + // Text and labels + text: { + valType: 'data_array', + editType: 'calc', + anim: true, + description: 'Sets text elements associated with each (x,y) pair.' + }, + textposition: { + valType: 'enumerated', + values: [ + 'top left', 'top center', 'top right', + 'middle left', 'middle center', 'middle right', + 'bottom left', 'bottom center', 'bottom right' + ], + dflt: 'middle center', + editType: 'calc', + description: 'Sets the positions of the `text` elements with respects to the (x,y) coordinates.' + }, + // Text font + textfont: fontAttrs({ + editType: 'calc', + colorEditType: 'style', + arrayOk: true, + description: 'Sets the text font.' + }), + + // Selection and styling + selected: { + line: { + color: { + valType: 'color', + editType: 'style', + description: 'Sets the line color of selected points.' + }, + width: { + valType: 'number', + min: 0, + editType: 'style', + description: 'Sets the line width of selected points.' + }, + editType: 'style' + }, + textfont: { + color: { + valType: 'color', + editType: 'style', + description: 'Sets the text font color of selected points, applied only when a selection exists.' + }, + editType: 'style' + }, + editType: 'style' + }, + unselected: { + line: { + color: { + valType: 'color', + editType: 'style', + description: 'Sets the line color of unselected points.' + }, + width: { + valType: 'number', + min: 0, + editType: 'style', + description: 'Sets the line width of unselected points.' + }, + editType: 'style' + }, + textfont: { + color: { + valType: 'color', + editType: 'style', + description: 'Sets the text font color of unselected points, applied only when a selection exists.' + }, + editType: 'style' + }, + editType: 'style' + } +}; + +// Extend with base attributes (includes hoverinfo, etc.) +extendFlat(attrs, baseAttrs); + +// Add hoverinfo with proper flags for quiver +// We need to create a new object to avoid mutating the shared base attributes +attrs.hoverinfo = extendFlat({}, baseAttrs.hoverinfo, { + flags: ['x', 'y', 'u', 'v', 'text', 'name'], + dflt: 'all' +}); + +// Add hovertemplate +attrs.hovertemplate = extendFlat({}, hovertemplateAttrs({}, { + keys: ['x', 'y', 'u', 'v', 'text', 'name'] +})); + +module.exports = attrs; \ No newline at end of file diff --git a/src/traces/scatterquiver/calc.js b/src/traces/scatterquiver/calc.js new file mode 100644 index 00000000000..f502d19bc4c --- /dev/null +++ b/src/traces/scatterquiver/calc.js @@ -0,0 +1,55 @@ +'use strict'; + +var Lib = require('../../lib'); + +/** + * Main calculation function for scatterquiver trace + * Creates calcdata with arrow path data for each vector + */ +module.exports = function calc(gd, trace) { + var x = trace.x; + var y = trace.y; + var u = trace.u; + var v = trace.v; + var scale = trace.scale; + var arrowScale = trace.arrow_scale; + var angle = trace.angle; + var scaleRatio = trace.scaleratio; + + // Create calcdata - one complete arrow per entry + var calcdata = []; + var len = x.length; + + for(var i = 0; i < len; i++) { + // Calculate arrow components + var dx = u[i] * scale * (scaleRatio || 1); + var dy = v[i] * scale; + var barbLen = Math.sqrt(dx * dx / (scaleRatio || 1) + dy * dy); + var arrowLen = barbLen * arrowScale; + var barbAng = Math.atan2(dy, dx / (scaleRatio || 1)); + + var ang1 = barbAng + angle; + var ang2 = barbAng - angle; + + var endX = x[i] + dx; + var endY = y[i] + dy; + + var point1X = endX - arrowLen * Math.cos(ang1) * (scaleRatio || 1); + var point1Y = endY - arrowLen * Math.sin(ang1); + var point2X = endX - arrowLen * Math.cos(ang2) * (scaleRatio || 1); + var point2Y = endY - arrowLen * Math.sin(ang2); + + // Create complete arrow as one path: shaft + arrow head + var arrowPath = [ + { x: x[i], y: y[i], i: i }, // Start point + { x: endX, y: endY, i: i }, // End of shaft + { x: point1X, y: point1Y, i: i }, // Arrow head point 1 + { x: endX, y: endY, i: i }, // Back to end + { x: point2X, y: point2Y, i: i } // Arrow head point 2 + ]; + + calcdata.push(arrowPath); + } + + return calcdata; +}; \ No newline at end of file diff --git a/src/traces/scatterquiver/defaults.js b/src/traces/scatterquiver/defaults.js new file mode 100644 index 00000000000..651e6dd2775 --- /dev/null +++ b/src/traces/scatterquiver/defaults.js @@ -0,0 +1,68 @@ +'use strict'; + +var Lib = require('../../lib'); +var attributes = require('./attributes'); + +module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { + // Selection styling - use coerce to set proper defaults + function coerce(attr, dflt) { + return Lib.coerce(traceIn, traceOut, attributes, attr, dflt); + } + + // Coerce x and y data arrays (this ensures proper data structure for category ordering) + var x = coerce('x'); + var y = coerce('y'); + var u = coerce('u'); + var v = coerce('v'); + + // Simple validation - check if we have the required arrays + if(!x || !Array.isArray(x) || x.length === 0 || + !y || !Array.isArray(y) || y.length === 0 || + !u || !Array.isArray(u) || u.length === 0 || + !v || !Array.isArray(v) || v.length === 0) { + traceOut.visible = false; + return; + } + + // Set basic properties + traceOut.type = 'scatterquiver'; + traceOut.visible = true; + + // Set default values using coerce + coerce('scale', 0.1); + coerce('arrow_scale', 0.3); + coerce('angle', Math.PI / 9); + coerce('scaleratio'); + coerce('hoverdistance', 20); + + // Line styling + traceOut.line = { + color: traceIn.line && traceIn.line.color ? traceIn.line.color : defaultColor, + width: traceIn.line && traceIn.line.width ? traceIn.line.width : 1, + dash: traceIn.line && traceIn.line.dash ? traceIn.line.dash : 'solid', + shape: traceIn.line && traceIn.line.shape ? traceIn.line.shape : 'linear', + smoothing: traceIn.line && traceIn.line.smoothing ? traceIn.line.smoothing : 1, + simplify: traceIn.line && traceIn.line.simplify !== undefined ? traceIn.line.simplify : true + }; + + // Hover and interaction - let the plots module handle hoverinfo defaults + // traceOut.hoverinfo will be set by Lib.coerceHoverinfo in plots.js + traceOut.hovertemplate = traceIn.hovertemplate; + + // Text + traceOut.text = traceIn.text; + traceOut.textposition = traceIn.textposition || 'middle center'; + + // Use Lib.coerceFont to set textfont properly + Lib.coerceFont(coerce, 'textfont', layout.font); + + coerce('selected.line.color'); + coerce('selected.line.width'); + coerce('selected.textfont.color'); + coerce('unselected.line.color'); + coerce('unselected.line.width'); + coerce('unselected.textfont.color'); + + // Set the data length + traceOut._length = x.length; +}; \ No newline at end of file diff --git a/src/traces/scatterquiver/event_data.js b/src/traces/scatterquiver/event_data.js new file mode 100644 index 00000000000..faecde95abb --- /dev/null +++ b/src/traces/scatterquiver/event_data.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = function eventData(out, pt, trace, cd, pointNumber) { + out.x = pt.x; + out.y = pt.y; + out.u = trace.u[pointNumber]; + out.v = trace.v[pointNumber]; + out.pointNumber = pointNumber; + out.trace = trace; +}; diff --git a/src/traces/scatterquiver/hover.js b/src/traces/scatterquiver/hover.js new file mode 100644 index 00000000000..e5502dcbc0a --- /dev/null +++ b/src/traces/scatterquiver/hover.js @@ -0,0 +1,75 @@ +'use strict'; + +var Lib = require('../../lib'); +var Fx = require('../../components/fx'); +var Registry = require('../../registry'); + +module.exports = function hoverPoints(pointData, xval, yval, hovermode) { + var cd = pointData.cd; + var trace = cd[0].trace; + var xa = pointData.xa; + var ya = pointData.ya; + var xpx = xa.c2p(xval); + var ypx = ya.c2p(yval); + + // Find the closest arrow to the hover point + var minDistance = Infinity; + var closestPoint = null; + var closestIndex = -1; + + // Check each arrow segment + for(var i = 0; i < cd.length; i++) { + var segment = cd[i]; + if(segment.length < 2) continue; + + // Calculate distance to the start point of the arrow + var x1 = xa.c2p(segment[0].x); + var y1 = ya.c2p(segment[0].y); + + var distance = Math.sqrt((xpx - x1) * (xpx - x1) + (ypx - y1) * (ypx - y1)); + + if(distance < minDistance) { + minDistance = distance; + closestPoint = segment[0]; // Use the start point for hover data + closestIndex = i; + } + } + + if(!closestPoint || minDistance > (trace.hoverdistance || 20)) return; + + // Create hover point data with proper label values and spikeline support + var hoverPoint = { + x: closestPoint.x, + y: closestPoint.y, + u: trace.u[closestIndex], + v: trace.v[closestIndex], + text: trace.text ? trace.text[closestIndex] : '', + name: trace.name || '', + trace: trace, + index: closestIndex, + // Set label values for proper hover formatting + xLabelVal: closestPoint.x, + yLabelVal: closestPoint.y, + uLabelVal: trace.u[closestIndex], + vLabelVal: trace.v[closestIndex], + // Add spikeline support + xa: pointData.xa, + ya: pointData.ya, + x0: closestPoint.x, + x1: closestPoint.x, + y0: closestPoint.y, + y1: closestPoint.y, + distance: minDistance, + spikeDistance: minDistance, + curveNumber: trace.index, + color: trace.line ? trace.line.color : 'blue' + }; + + // Set hover text + var hovertext = trace.hovertext || trace.text; + if(hovertext && hovertext[closestIndex]) { + hoverPoint.hovertext = hovertext[closestIndex]; + } + + return [hoverPoint]; +}; \ No newline at end of file diff --git a/src/traces/scatterquiver/index.js b/src/traces/scatterquiver/index.js new file mode 100644 index 00000000000..b476090cc53 --- /dev/null +++ b/src/traces/scatterquiver/index.js @@ -0,0 +1,31 @@ +'use strict'; + +module.exports = { + moduleType: 'trace', + name: 'scatterquiver', + basePlotModule: require('../../plots/cartesian'), + categories: [ + 'cartesian', 'svg', 'showLegend', 'scatter-like', 'zoomScale' + ], + + attributes: require('./attributes'), + supplyDefaults: require('./defaults'), + calc: require('./calc'), + plot: require('./plot'), + style: require('./style'), + styleOnSelect: require('../scatter/style').styleOnSelect, + hoverPoints: require('./hover'), + eventData: require('./event_data'), + selectPoints: require('./select_points'), + animatable: true, + + meta: { + description: [ + 'The scatterquiver trace type visualizes vector fields using arrows.', + 'Specify a vector field using 4 1D arrays:', + '2 position arrays `x`, `y` and 2 vector component arrays `u`, `v`.', + 'The arrows are drawn exactly at the positions given by `x` and `y`.', + 'Arrow length and direction are determined by `u` and `v` components.' + ].join(' ') + } +}; diff --git a/src/traces/scatterquiver/plot.js b/src/traces/scatterquiver/plot.js new file mode 100644 index 00000000000..36a9bb4cb7e --- /dev/null +++ b/src/traces/scatterquiver/plot.js @@ -0,0 +1,120 @@ +'use strict'; + +var d3 = require('@plotly/d3'); + +var Registry = require('../../registry'); +var Lib = require('../../lib'); +var Drawing = require('../../components/drawing'); + +module.exports = function plot(gd, plotinfo, cdscatter, scatterLayer, transitionOpts, makeOnCompleteCallback) { + var join, onComplete; + + // If transition config is provided, then it is only a partial replot and traces not + // updated are removed. + var isFullReplot = !transitionOpts; + var hasTransition = !!transitionOpts && transitionOpts.duration > 0; + + join = scatterLayer.selectAll('g.trace') + .data(cdscatter, function(d) { return d[0].trace.uid; }); + + // Append new traces: + join.enter().append('g') + .attr('class', function(d) { + return 'trace scatterquiver trace' + d[0].trace.uid; + }) + .style('stroke-miterlimit', 2); + join.order(); + + if(hasTransition) { + if(makeOnCompleteCallback) { + onComplete = makeOnCompleteCallback(); + } + + var transition = d3.transition() + .duration(transitionOpts.duration) + .ease(transitionOpts.easing) + .each('end', function() { + onComplete && onComplete(); + }) + .each('interrupt', function() { + onComplete && onComplete(); + }); + + transition.each(function() { + scatterLayer.selectAll('g.trace').each(function(d, i) { + plotOne(gd, i, plotinfo, d, cdscatter, this, transitionOpts); + }); + }); + } else { + join.each(function(d, i) { + plotOne(gd, i, plotinfo, d, cdscatter, this, transitionOpts); + }); + } + + if(isFullReplot) { + join.exit().remove(); + } +}; + +function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transitionOpts) { + var trace = cdscatter[0].trace; + var xa = plotinfo.xaxis; + var ya = plotinfo.yaxis; + var fullLayout = gd._fullLayout; + + // Create line group for arrows + var lines = d3.select(element).selectAll('g.lines') + .data([cdscatter]); + + lines.enter().append('g') + .classed('lines', true); + + Drawing.setClipUrl(lines, plotinfo.layerClipId, gd); + + // Create line segments for each arrow + var lineSegments = lines.selectAll('path.js-line') + .data(cdscatter); + + lineSegments.enter().append('path') + .classed('js-line', true) + .style('vector-effect', 'non-scaling-stroke'); + + lineSegments.exit().remove(); + + // Update line segments + lineSegments.each(function(d) { + var path = d3.select(this); + var segment = d; + + if(segment.length === 0) return; + + // Convert data coordinates to pixel coordinates + var pixelCoords = segment.map(function(point) { + return { + x: xa.c2p(point.x), + y: ya.c2p(point.y) + }; + }); + + // Create SVG path from pixel coordinates + var pathData = 'M' + pixelCoords[0].x + ',' + pixelCoords[0].y; + for(var i = 1; i < pixelCoords.length; i++) { + pathData += 'L' + pixelCoords[i].x + ',' + pixelCoords[i].y; + } + + path.attr('d', pathData); + }); + + // Apply styling using Plotly's standard styling system + Drawing.lineGroupStyle(lineSegments, trace.line && trace.line.width, trace.line && trace.line.color, trace.line && trace.line.dash); + + // Handle transitions + if(transitionOpts && transitionOpts.duration > 0) { + var transition = d3.transition() + .duration(transitionOpts.duration) + .ease(transitionOpts.easing); + + lineSegments.transition(transition) + .style('opacity', 1); + } +} \ No newline at end of file diff --git a/src/traces/scatterquiver/select_points.js b/src/traces/scatterquiver/select_points.js new file mode 100644 index 00000000000..e169b1b9517 --- /dev/null +++ b/src/traces/scatterquiver/select_points.js @@ -0,0 +1,39 @@ +'use strict'; + +module.exports = function selectPoints(searchInfo, selectionTester) { + var cd = searchInfo.cd; + var xa = searchInfo.xaxis; + var ya = searchInfo.yaxis; + var selection = []; + var trace = cd[0].trace; + var i; + var segment; + var x; + var y; + + if(selectionTester === false) { // clear selection + for(i = 0; i < cd.length; i++) { + cd[i].selected = 0; + } + } else { + for(i = 0; i < cd.length; i++) { + segment = cd[i]; + // Use the start point of the arrow for selection testing + x = xa.c2p(segment[0].x); + y = ya.c2p(segment[0].y); + + if((segment[0].i !== null) && selectionTester.contains([x, y], false, i, searchInfo)) { + selection.push({ + pointNumber: segment[0].i, + x: xa.c2d(segment[0].x), + y: ya.c2d(segment[0].y) + }); + segment.selected = 1; + } else { + segment.selected = 0; + } + } + } + + return selection; +}; diff --git a/src/traces/scatterquiver/style.js b/src/traces/scatterquiver/style.js new file mode 100644 index 00000000000..deb72e21718 --- /dev/null +++ b/src/traces/scatterquiver/style.js @@ -0,0 +1,16 @@ +'use strict'; + +var d3 = require('@plotly/d3'); + +var Drawing = require('../../components/drawing'); +var Lib = require('../../lib'); + +module.exports = function style(gd, calcTrace) { + if(!calcTrace || !calcTrace.length || !calcTrace[0]) return; + + var trace = calcTrace[0].trace; + var s = d3.select(gd).selectAll('g.trace' + trace.uid); + + s.selectAll('path.js-line') + .call(Drawing.lineGroupStyle, trace.line || {}); +}; diff --git a/test/plot-schema.json b/test/plot-schema.json index 53d05bd9ee5..57987a0cd93 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -57541,6 +57541,1569 @@ }, "type": "pie" }, + "quiver": { + "animatable": true, + "attributes": { + "anchor": { + "description": "Sets the arrows' anchor with respect to their (x,y) positions. Use *tail* to place (x,y) at the base, *tip* to place (x,y) at the head, or *cm*/*center*/*middle* to center the arrow on (x,y).", + "dflt": "tail", + "editType": "calc", + "valType": "enumerated", + "values": [ + "tip", + "tail", + "cm", + "center", + "middle" + ] + }, + "arrow_scale": { + "description": "Deprecated alias for `arrowsize`-based sizing. Prefer using `arrowsize`.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "arrowsize": { + "description": "Scales the size of the arrow head relative to a base size. Higher values produce larger heads.", + "dflt": 1, + "editType": "calc", + "min": 0.3, + "valType": "number" + }, + "arrowwidth": { + "description": "Sets the width (in px) of the arrow line (alias of `line.width`).", + "editType": "style", + "min": 0.1, + "valType": "number" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "c": { + "anim": true, + "description": "Sets the scalar values used to map colors via the colorscale. If not provided, the magnitude sqrt(u^2 + v^2) is used.", + "editType": "calc", + "valType": "data_array" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v norm) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Value should have the same units as u/v norm and if set, `cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as u/v norm. Has no effect when `cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Value should have the same units as u/v norm and if set, `cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "csrc": { + "description": "Sets the source reference on Chart Studio Cloud for `c`.", + "editType": "none", + "valType": "string" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "hoverdistance": { + "description": "Maximum distance (in pixels) to look for nearby arrows on hover.", + "dflt": 20, + "editType": "calc", + "min": -1, + "valType": "number" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "u", + "v", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `u`, `v`, `text` and `name`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "ids": { + "anim": true, + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "color": { + "description": "Sets the color of the arrow lines.", + "dflt": "#000", + "editType": "style", + "valType": "color" + }, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, + "editType": "style", + "role": "object", + "shape": { + "description": "Determines the line shape.", + "dflt": "linear", + "editType": "plot", + "valType": "enumerated", + "values": [ + "linear", + "spline", + "hv", + "vh", + "hvh", + "vhv" + ] + }, + "simplify": { + "description": "Simplifies lines by removing nearly-overlapping points.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + }, + "smoothing": { + "description": "Has an effect only if `shape` is set to *spline*. Sets the amount of smoothing.", + "dflt": 1, + "editType": "plot", + "max": 1.3, + "min": 0, + "valType": "number" + }, + "width": { + "description": "Sets the width (in px) of the arrow lines.", + "dflt": 1, + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "reversescale": { + "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "selected": { + "editType": "style", + "line": { + "color": { + "description": "Sets the line color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width of selected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "sizemode": { + "description": "Determines whether `sizeref` is set as a *scaled* (unitless) scalar (normalized by the max u/v norm in the vector field), as an *absolute* value (in the same units as the vector field), or *raw* to use the raw vector lengths.", + "dflt": "scaled", + "editType": "calc", + "valType": "enumerated", + "values": [ + "scaled", + "absolute", + "raw" + ] + }, + "sizeref": { + "description": "Adjusts the arrow size scaling. The arrow length is determined by the vector norm multiplied by `sizeref`, optionally normalized when `sizemode` is *scaled*.", + "editType": "calc", + "min": 0, + "valType": "number" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "text": { + "anim": true, + "description": "Sets text elements associated with each (x,y) pair.", + "editType": "calc", + "valType": "data_array" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textposition": { + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "type": "quiver", + "u": { + "anim": true, + "description": "Sets the x components of the arrow vectors.", + "editType": "calc", + "valType": "data_array" + }, + "uid": { + "anim": true, + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "style", + "line": { + "color": { + "description": "Sets the line color of unselected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width of unselected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "usrc": { + "description": "Sets the source reference on Chart Studio Cloud for `u`.", + "editType": "none", + "valType": "string" + }, + "v": { + "anim": true, + "description": "Sets the y components of the arrow vectors.", + "editType": "calc", + "valType": "data_array" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + }, + "vsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `v`.", + "editType": "none", + "valType": "string" + }, + "x": { + "anim": true, + "description": "Sets the x coordinates of the arrow locations.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid" + }, + "xsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `x`.", + "editType": "none", + "valType": "string" + }, + "y": { + "anim": true, + "description": "Sets the y coordinates of the arrow locations.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", + "editType": "calc+clearAxisTypes", + "valType": "subplotid" + }, + "ysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `y`.", + "editType": "none", + "valType": "string" + } + }, + "categories": [ + "cartesian", + "svg", + "showLegend", + "scatter-like", + "zoomScale" + ], + "meta": { + "description": "The quiver trace type visualizes vector fields using arrows. Specify a vector field using 4 1D arrays: 2 position arrays `x`, `y` and 2 vector component arrays `u`, `v`. The arrows are drawn exactly at the positions given by `x` and `y`. Arrow length and direction are determined by `u` and `v` components." + }, + "type": "quiver" + }, "sankey": { "animatable": false, "attributes": { From 5d4856f05ceeec879c63d740adb56b1bd5dfddb6 Mon Sep 17 00:00:00 2001 From: John Degner Date: Wed, 22 Oct 2025 08:43:35 -0700 Subject: [PATCH 02/14] Ensure no-gl-jasmine tests pass --- src/traces/scatterquiver/calc.js | 76 +++++++++++++--------------- src/traces/scatterquiver/defaults.js | 18 +++++-- src/traces/scatterquiver/hover.js | 38 +++++++------- src/traces/scatterquiver/plot.js | 62 ++++++++++++++++------- 4 files changed, 111 insertions(+), 83 deletions(-) diff --git a/src/traces/scatterquiver/calc.js b/src/traces/scatterquiver/calc.js index f502d19bc4c..28e11e95116 100644 --- a/src/traces/scatterquiver/calc.js +++ b/src/traces/scatterquiver/calc.js @@ -1,55 +1,47 @@ 'use strict'; var Lib = require('../../lib'); +var Axes = require('../../plots/cartesian/axes'); +var isNumeric = require('fast-isnumeric'); +var BADNUM = require('../../constants/numerical').BADNUM; +var scatterCalc = require('../scatter/calc'); /** * Main calculation function for scatterquiver trace * Creates calcdata with arrow path data for each vector */ module.exports = function calc(gd, trace) { - var x = trace.x; - var y = trace.y; - var u = trace.u; - var v = trace.v; - var scale = trace.scale; - var arrowScale = trace.arrow_scale; - var angle = trace.angle; - var scaleRatio = trace.scaleratio; - - // Create calcdata - one complete arrow per entry - var calcdata = []; - var len = x.length; - + // Map x/y through axes so category/date values become numeric calcdata + var xa = trace._xA = Axes.getFromId(gd, trace.xaxis || 'x', 'x'); + var ya = trace._yA = Axes.getFromId(gd, trace.yaxis || 'y', 'y'); + + var xVals = xa.makeCalcdata(trace, 'x'); + var yVals = ya.makeCalcdata(trace, 'y'); + + // u/v are read in plot using the original trace arrays via cdi.i + + var len = Math.min(xVals.length, yVals.length); + trace._length = len; + var cd = new Array(len); + for(var i = 0; i < len; i++) { - // Calculate arrow components - var dx = u[i] * scale * (scaleRatio || 1); - var dy = v[i] * scale; - var barbLen = Math.sqrt(dx * dx / (scaleRatio || 1) + dy * dy); - var arrowLen = barbLen * arrowScale; - var barbAng = Math.atan2(dy, dx / (scaleRatio || 1)); - - var ang1 = barbAng + angle; - var ang2 = barbAng - angle; - - var endX = x[i] + dx; - var endY = y[i] + dy; - - var point1X = endX - arrowLen * Math.cos(ang1) * (scaleRatio || 1); - var point1Y = endY - arrowLen * Math.sin(ang1); - var point2X = endX - arrowLen * Math.cos(ang2) * (scaleRatio || 1); - var point2Y = endY - arrowLen * Math.sin(ang2); - - // Create complete arrow as one path: shaft + arrow head - var arrowPath = [ - { x: x[i], y: y[i], i: i }, // Start point - { x: endX, y: endY, i: i }, // End of shaft - { x: point1X, y: point1Y, i: i }, // Arrow head point 1 - { x: endX, y: endY, i: i }, // Back to end - { x: point2X, y: point2Y, i: i } // Arrow head point 2 - ]; - - calcdata.push(arrowPath); + var cdi = cd[i] = { i: i }; + var xValid = isNumeric(xVals[i]); + var yValid = isNumeric(yVals[i]); + + if(xValid && yValid) { + cdi.x = xVals[i]; + cdi.y = yVals[i]; + } else { + cdi.x = BADNUM; + cdi.y = BADNUM; + } + + // No additional props; keep minimal to avoid collisions with generic fields (e.g. `v`) } - return calcdata; + // Ensure axes are expanded and categories registered like scatter traces do + scatterCalc.calcAxisExpansion(gd, trace, xa, ya, xVals, yVals); + + return cd; }; \ No newline at end of file diff --git a/src/traces/scatterquiver/defaults.js b/src/traces/scatterquiver/defaults.js index 651e6dd2775..1992c520baf 100644 --- a/src/traces/scatterquiver/defaults.js +++ b/src/traces/scatterquiver/defaults.js @@ -17,16 +17,24 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // Simple validation - check if we have the required arrays if(!x || !Array.isArray(x) || x.length === 0 || - !y || !Array.isArray(y) || y.length === 0 || - !u || !Array.isArray(u) || u.length === 0 || - !v || !Array.isArray(v) || v.length === 0) { + !y || !Array.isArray(y) || y.length === 0) { traceOut.visible = false; return; } + // If u/v are missing, default to zeros so the trace participates in calc/category logic + var len = Math.min(x.length, y.length); + if(!Array.isArray(u) || u.length === 0) { + traceOut.u = new Array(len); + for(var i = 0; i < len; i++) traceOut.u[i] = 0; + } + if(!Array.isArray(v) || v.length === 0) { + traceOut.v = new Array(len); + for(var j = 0; j < len; j++) traceOut.v[j] = 0; + } + // Set basic properties traceOut.type = 'scatterquiver'; - traceOut.visible = true; // Set default values using coerce coerce('scale', 0.1); @@ -64,5 +72,5 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('unselected.textfont.color'); // Set the data length - traceOut._length = x.length; + traceOut._length = len; }; \ No newline at end of file diff --git a/src/traces/scatterquiver/hover.js b/src/traces/scatterquiver/hover.js index e5502dcbc0a..d786ea3afc3 100644 --- a/src/traces/scatterquiver/hover.js +++ b/src/traces/scatterquiver/hover.js @@ -12,47 +12,47 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { var xpx = xa.c2p(xval); var ypx = ya.c2p(yval); - // Find the closest arrow to the hover point + // Find the closest arrow base point to the hover point var minDistance = Infinity; var closestPoint = null; var closestIndex = -1; - // Check each arrow segment + // Each cd[i] is a calcdata point object with x/y for(var i = 0; i < cd.length; i++) { - var segment = cd[i]; - if(segment.length < 2) continue; + var cdi = cd[i]; + if(cdi.x === undefined || cdi.y === undefined) continue; + + var px = xa.c2p(cdi.x); + var py = ya.c2p(cdi.y); + + var distance = Math.sqrt((xpx - px) * (xpx - px) + (ypx - py) * (ypx - py)); - // Calculate distance to the start point of the arrow - var x1 = xa.c2p(segment[0].x); - var y1 = ya.c2p(segment[0].y); - - var distance = Math.sqrt((xpx - x1) * (xpx - x1) + (ypx - y1) * (ypx - y1)); - if(distance < minDistance) { minDistance = distance; - closestPoint = segment[0]; // Use the start point for hover data + closestPoint = cdi; closestIndex = i; } } - if(!closestPoint || minDistance > (trace.hoverdistance || 20)) return; + var maxHoverDist = pointData.distance === Infinity ? Infinity : (trace.hoverdistance || 20); + if(!closestPoint || minDistance > maxHoverDist) return; // Create hover point data with proper label values and spikeline support var hoverPoint = { x: closestPoint.x, y: closestPoint.y, - u: trace.u[closestIndex], - v: trace.v[closestIndex], - text: trace.text ? trace.text[closestIndex] : '', + u: trace.u ? trace.u[closestIndex] : undefined, + v: trace.v ? trace.v[closestIndex] : undefined, + text: Array.isArray(trace.text) ? trace.text[closestIndex] : trace.text, name: trace.name || '', trace: trace, index: closestIndex, - // Set label values for proper hover formatting + // Label values for formatting xLabelVal: closestPoint.x, yLabelVal: closestPoint.y, - uLabelVal: trace.u[closestIndex], - vLabelVal: trace.v[closestIndex], - // Add spikeline support + uLabelVal: trace.u ? trace.u[closestIndex] : undefined, + vLabelVal: trace.v ? trace.v[closestIndex] : undefined, + // Spikeline support xa: pointData.xa, ya: pointData.ya, x0: closestPoint.x, diff --git a/src/traces/scatterquiver/plot.js b/src/traces/scatterquiver/plot.js index 36a9bb4cb7e..87e2d754926 100644 --- a/src/traces/scatterquiver/plot.js +++ b/src/traces/scatterquiver/plot.js @@ -71,7 +71,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition Drawing.setClipUrl(lines, plotinfo.layerClipId, gd); - // Create line segments for each arrow + // Create one path per data point (arrow) var lineSegments = lines.selectAll('path.js-line') .data(cdscatter); @@ -82,26 +82,54 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition lineSegments.exit().remove(); // Update line segments - lineSegments.each(function(d) { + lineSegments.each(function(cdi) { var path = d3.select(this); - var segment = d; - - if(segment.length === 0) return; - - // Convert data coordinates to pixel coordinates - var pixelCoords = segment.map(function(point) { - return { - x: xa.c2p(point.x), - y: ya.c2p(point.y) - }; - }); - // Create SVG path from pixel coordinates - var pathData = 'M' + pixelCoords[0].x + ',' + pixelCoords[0].y; - for(var i = 1; i < pixelCoords.length; i++) { - pathData += 'L' + pixelCoords[i].x + ',' + pixelCoords[i].y; + // Skip invalid points + if(cdi.x === undefined || cdi.y === undefined) { + path.attr('d', null); + return; } + // Compute arrow in data space + var scale = trace.scale || 1; + var scaleRatio = trace.scaleratio || 1; + var arrowScale = trace.arrow_scale || 0.2; + var angle = trace.angle || Math.PI / 12; // small default + + var u = (trace.u && trace.u[cdi.i]) || 0; + var v = (trace.v && trace.v[cdi.i]) || 0; + + var dx = u * scale * scaleRatio; + var dy = v * scale; + var barbLen = Math.sqrt((dx * dx) / scaleRatio + dy * dy); + var arrowLen = barbLen * arrowScale; + var barbAng = Math.atan2(dy, dx / scaleRatio); + + var ang1 = barbAng + angle; + var ang2 = barbAng - angle; + + var x0 = cdi.x; + var y0 = cdi.y; + var x1 = x0 + dx; + var y1 = y0 + dy; + + var xh1 = x1 - arrowLen * Math.cos(ang1) * scaleRatio; + var yh1 = y1 - arrowLen * Math.sin(ang1); + var xh2 = x1 - arrowLen * Math.cos(ang2) * scaleRatio; + var yh2 = y1 - arrowLen * Math.sin(ang2); + + // Convert to pixels + var p0x = xa.c2p(x0); + var p0y = ya.c2p(y0); + var p1x = xa.c2p(x1); + var p1y = ya.c2p(y1); + var ph1x = xa.c2p(xh1); + var ph1y = ya.c2p(yh1); + var ph2x = xa.c2p(xh2); + var ph2y = ya.c2p(yh2); + + var pathData = 'M' + p0x + ',' + p0y + 'L' + p1x + ',' + p1y + 'L' + ph1x + ',' + ph1y + 'L' + p1x + ',' + p1y + 'L' + ph2x + ',' + ph2y; path.attr('d', pathData); }); From 7cfe9b05c7b8c17356dc1ee0cd61406d4262db09 Mon Sep 17 00:00:00 2001 From: John Degner Date: Sun, 2 Nov 2025 09:59:30 -0800 Subject: [PATCH 03/14] Name plot type quiver not scatterquiver --- lib/index-strict.js | 2 +- lib/index.js | 2 +- lib/quiver.js | 5 + lib/scatterquiver.js | 3 - .../{scatterquiver => quiver}/attributes.js | 4 +- src/traces/{scatterquiver => quiver}/calc.js | 8 +- .../{scatterquiver => quiver}/defaults.js | 6 +- .../{scatterquiver => quiver}/event_data.js | 2 + src/traces/{scatterquiver => quiver}/hover.js | 4 +- src/traces/{scatterquiver => quiver}/index.js | 6 +- src/traces/{scatterquiver => quiver}/plot.js | 6 +- .../select_points.js | 2 + src/traces/{scatterquiver => quiver}/style.js | 2 + test/plot-schema.json | 12055 ++++++++++++++++ 14 files changed, 12090 insertions(+), 17 deletions(-) create mode 100644 lib/quiver.js delete mode 100644 lib/scatterquiver.js rename src/traces/{scatterquiver => quiver}/attributes.js (99%) rename src/traces/{scatterquiver => quiver}/calc.js (89%) rename src/traces/{scatterquiver => quiver}/defaults.js (98%) rename src/traces/{scatterquiver => quiver}/event_data.js (99%) rename src/traces/{scatterquiver => quiver}/hover.js (99%) rename src/traces/{scatterquiver => quiver}/index.js (89%) rename src/traces/{scatterquiver => quiver}/plot.js (98%) rename src/traces/{scatterquiver => quiver}/select_points.js (99%) rename src/traces/{scatterquiver => quiver}/style.js (99%) diff --git a/lib/index-strict.js b/lib/index-strict.js index 8e332c3b56d..c5d1c092056 100644 --- a/lib/index-strict.js +++ b/lib/index-strict.js @@ -52,7 +52,7 @@ Plotly.register([ require('../src/traces/scatterpolargl/strict'), require('./barpolar'), require('./scattersmith'), - require('./scatterquiver'), + require('./quiver'), // components require('./calendars'), diff --git a/lib/index.js b/lib/index.js index d234cfca3ea..73f4f0a29b8 100644 --- a/lib/index.js +++ b/lib/index.js @@ -52,7 +52,7 @@ Plotly.register([ require('./scatterpolargl'), require('./barpolar'), require('./scattersmith'), - require('./scatterquiver'), + require('./quiver'), // components require('./calendars'), diff --git a/lib/quiver.js b/lib/quiver.js new file mode 100644 index 00000000000..0368a75e500 --- /dev/null +++ b/lib/quiver.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = require('../src/traces/quiver'); + + diff --git a/lib/scatterquiver.js b/lib/scatterquiver.js deleted file mode 100644 index f3d08677cc2..00000000000 --- a/lib/scatterquiver.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -module.exports = require('../src/traces/scatterquiver'); diff --git a/src/traces/scatterquiver/attributes.js b/src/traces/quiver/attributes.js similarity index 99% rename from src/traces/scatterquiver/attributes.js rename to src/traces/quiver/attributes.js index 6a72329cee5..5586bc37783 100644 --- a/src/traces/scatterquiver/attributes.js +++ b/src/traces/quiver/attributes.js @@ -204,4 +204,6 @@ attrs.hovertemplate = extendFlat({}, hovertemplateAttrs({}, { keys: ['x', 'y', 'u', 'v', 'text', 'name'] })); -module.exports = attrs; \ No newline at end of file +module.exports = attrs; + + diff --git a/src/traces/scatterquiver/calc.js b/src/traces/quiver/calc.js similarity index 89% rename from src/traces/scatterquiver/calc.js rename to src/traces/quiver/calc.js index 28e11e95116..1fd8877bef7 100644 --- a/src/traces/scatterquiver/calc.js +++ b/src/traces/quiver/calc.js @@ -7,7 +7,7 @@ var BADNUM = require('../../constants/numerical').BADNUM; var scatterCalc = require('../scatter/calc'); /** - * Main calculation function for scatterquiver trace + * Main calculation function for quiver trace * Creates calcdata with arrow path data for each vector */ module.exports = function calc(gd, trace) { @@ -36,12 +36,12 @@ module.exports = function calc(gd, trace) { cdi.x = BADNUM; cdi.y = BADNUM; } - - // No additional props; keep minimal to avoid collisions with generic fields (e.g. `v`) } // Ensure axes are expanded and categories registered like scatter traces do scatterCalc.calcAxisExpansion(gd, trace, xa, ya, xVals, yVals); return cd; -}; \ No newline at end of file +}; + + diff --git a/src/traces/scatterquiver/defaults.js b/src/traces/quiver/defaults.js similarity index 98% rename from src/traces/scatterquiver/defaults.js rename to src/traces/quiver/defaults.js index 1992c520baf..2584e758286 100644 --- a/src/traces/scatterquiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -34,7 +34,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout } // Set basic properties - traceOut.type = 'scatterquiver'; + traceOut.type = 'quiver'; // Set default values using coerce coerce('scale', 0.1); @@ -73,4 +73,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // Set the data length traceOut._length = len; -}; \ No newline at end of file +}; + + diff --git a/src/traces/scatterquiver/event_data.js b/src/traces/quiver/event_data.js similarity index 99% rename from src/traces/scatterquiver/event_data.js rename to src/traces/quiver/event_data.js index faecde95abb..c744a23a152 100644 --- a/src/traces/scatterquiver/event_data.js +++ b/src/traces/quiver/event_data.js @@ -8,3 +8,5 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { out.pointNumber = pointNumber; out.trace = trace; }; + + diff --git a/src/traces/scatterquiver/hover.js b/src/traces/quiver/hover.js similarity index 99% rename from src/traces/scatterquiver/hover.js rename to src/traces/quiver/hover.js index d786ea3afc3..d9a3d4573fb 100644 --- a/src/traces/scatterquiver/hover.js +++ b/src/traces/quiver/hover.js @@ -72,4 +72,6 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { } return [hoverPoint]; -}; \ No newline at end of file +}; + + diff --git a/src/traces/scatterquiver/index.js b/src/traces/quiver/index.js similarity index 89% rename from src/traces/scatterquiver/index.js rename to src/traces/quiver/index.js index b476090cc53..82850f0840b 100644 --- a/src/traces/scatterquiver/index.js +++ b/src/traces/quiver/index.js @@ -2,7 +2,7 @@ module.exports = { moduleType: 'trace', - name: 'scatterquiver', + name: 'quiver', basePlotModule: require('../../plots/cartesian'), categories: [ 'cartesian', 'svg', 'showLegend', 'scatter-like', 'zoomScale' @@ -21,7 +21,7 @@ module.exports = { meta: { description: [ - 'The scatterquiver trace type visualizes vector fields using arrows.', + 'The quiver trace type visualizes vector fields using arrows.', 'Specify a vector field using 4 1D arrays:', '2 position arrays `x`, `y` and 2 vector component arrays `u`, `v`.', 'The arrows are drawn exactly at the positions given by `x` and `y`.', @@ -29,3 +29,5 @@ module.exports = { ].join(' ') } }; + + diff --git a/src/traces/scatterquiver/plot.js b/src/traces/quiver/plot.js similarity index 98% rename from src/traces/scatterquiver/plot.js rename to src/traces/quiver/plot.js index 87e2d754926..c1f67b156df 100644 --- a/src/traces/scatterquiver/plot.js +++ b/src/traces/quiver/plot.js @@ -20,7 +20,7 @@ module.exports = function plot(gd, plotinfo, cdscatter, scatterLayer, transition // Append new traces: join.enter().append('g') .attr('class', function(d) { - return 'trace scatterquiver trace' + d[0].trace.uid; + return 'trace quiver trace' + d[0].trace.uid; }) .style('stroke-miterlimit', 2); join.order(); @@ -145,4 +145,6 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition lineSegments.transition(transition) .style('opacity', 1); } -} \ No newline at end of file +} + + diff --git a/src/traces/scatterquiver/select_points.js b/src/traces/quiver/select_points.js similarity index 99% rename from src/traces/scatterquiver/select_points.js rename to src/traces/quiver/select_points.js index e169b1b9517..d2dfa2d1dab 100644 --- a/src/traces/scatterquiver/select_points.js +++ b/src/traces/quiver/select_points.js @@ -37,3 +37,5 @@ module.exports = function selectPoints(searchInfo, selectionTester) { return selection; }; + + diff --git a/src/traces/scatterquiver/style.js b/src/traces/quiver/style.js similarity index 99% rename from src/traces/scatterquiver/style.js rename to src/traces/quiver/style.js index deb72e21718..30da22034c9 100644 --- a/src/traces/scatterquiver/style.js +++ b/src/traces/quiver/style.js @@ -14,3 +14,5 @@ module.exports = function style(gd, calcTrace) { s.selectAll('path.js-line') .call(Drawing.lineGroupStyle, trace.line || {}); }; + + diff --git a/test/plot-schema.json b/test/plot-schema.json index 57987a0cd93..c07c61790ab 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -15005,6 +15005,12061 @@ "valType": "string" } }, +<<<<<<< HEAD +======= + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", + "values": [ + "diameter", + "area" + ] + }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", + "dflt": "circle", + "editType": "calc", + "valType": "string" + }, + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", + "dflt": "markers", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "selected": { + "editType": "calc", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of selected points.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "role": "object" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "subplot": { + "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", + "dflt": "map", + "editType": "calc", + "valType": "subplotid" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "textfont": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets the icon text font (color=map.layer.paint.text-color, size=map.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "dflt": "Open Sans Regular, Arial Unicode MS Regular", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "role": "object", + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "textposition": { + "arrayOk": false, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "type": "scattermap", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "calc", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "role": "object" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "map", + "gl", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "The data visualized as scatter point, lines or marker symbols on a MapLibre GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", + "hrName": "scatter_map" + }, + "type": "scattermap" + }, + "scattermapbox": { + "animatable": false, + "attributes": { + "below": { + "description": "Determines if this scattermapbox trace's layers are to be inserted before the layer with the specified ID. By default, scattermapbox layers are inserted above all the base layers. To place the scattermapbox layers above every other layer, set `below` to *''*.", + "editType": "calc", + "valType": "string" + }, + "cluster": { + "color": { + "arrayOk": true, + "description": "Sets the color for each cluster step.", + "editType": "calc", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether clustering is enabled or disabled.", + "editType": "calc", + "valType": "boolean" + }, + "maxzoom": { + "description": "Sets the maximum zoom level. At zoom levels equal to or greater than this, points will never be clustered.", + "dflt": 24, + "editType": "calc", + "max": 24, + "min": 0, + "valType": "number" + }, + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "size": { + "arrayOk": true, + "description": "Sets the size for each cluster step.", + "dflt": 20, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "step": { + "arrayOk": true, + "description": "Sets how many points it takes to create a cluster or advance to the next cluster step. Use this in conjunction with arrays for `size` and / or `color`. If an integer, steps start at multiples of this number. If an array, each step extends from the given value until one less than the next value.", + "dflt": -1, + "editType": "calc", + "min": -1, + "valType": "number" + }, + "stepsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `step`.", + "editType": "none", + "valType": "string" + } + }, + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "fill": { + "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.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "toself" + ] + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "calc", + "valType": "color" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "calc", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "lon", + "lat", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "hovertextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "lat": { + "description": "Sets the latitude coordinates (in degrees North).", + "editType": "calc", + "valType": "data_array" + }, + "latsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lat`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "color": { + "description": "Sets the line color.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "role": "object", + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "lon": { + "description": "Sets the longitude coordinates (in degrees East).", + "editType": "calc", + "valType": "data_array" + }, + "lonsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lon`.", + "editType": "none", + "valType": "string" + }, + "marker": { + "allowoverlap": { + "description": "Flag to draw all symbols, even if they overlap.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "angle": { + "arrayOk": true, + "description": "Sets the marker orientation from true North, in degrees clockwise. When using the *auto* default, no rotation would be applied in perspective views which is different from using a zero angle.", + "dflt": "auto", + "editType": "calc", + "valType": "number" + }, + "anglesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `angle`.", + "editType": "none", + "valType": "string" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "calc", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "calc", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "calc", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "calc", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "calc", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "calc", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "calc", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "calc", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "calc", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "calc", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "calc", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "calc", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "calc", + "font": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", + "values": [ + "diameter", + "area" + ] + }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", + "dflt": "circle", + "editType": "calc", + "valType": "string" + }, + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", + "dflt": "markers", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "selected": { + "editType": "calc", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of selected points.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "role": "object" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "subplot": { + "description": "mapbox subplots and traces are deprecated! Please consider switching to `map` subplots and traces. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ Sets a reference between this trace's data coordinates and a mapbox subplot. If *mapbox* (the default value), the data refer to `layout.mapbox`. If *mapbox2*, the data refer to `layout.mapbox2`, and so on.", + "dflt": "mapbox", + "editType": "calc", + "valType": "subplotid" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "textfont": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets the icon text font (color=mapbox.layer.paint.text-color, size=mapbox.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "dflt": "Open Sans Regular, Arial Unicode MS Regular", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "role": "object", + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "textposition": { + "arrayOk": false, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "type": "scattermapbox", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "calc", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "role": "object" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "mapbox", + "gl", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "*scattermapbox* trace is deprecated! Please consider switching to the *scattermap* trace type and `map` subplots. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ The data visualized as scatter point, lines or marker symbols on a Mapbox GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", + "hrName": "scatter_mapbox" + }, + "type": "scattermapbox" + }, + "scatterpolar": { + "animatable": false, + "attributes": { + "cliponaxis": { + "description": "Determines whether or not markers and text nodes are clipped about the subplot axes. To show markers and text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "dr": { + "description": "Sets the r coordinate step.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "dtheta": { + "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates.", + "editType": "calc", + "valType": "number" + }, + "fill": { + "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. scatterpolar has a subset of the options available to scatter. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "toself", + "tonext" + ] + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "style", + "valType": "color" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "r", + "theta", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "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*.", + "editType": "style", + "flags": [ + "points", + "fills" + ], + "valType": "flaglist" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "hovertextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "backoff": { + "arrayOk": true, + "description": "Sets the line back off from the end point of the nth line segment (in px). This option is useful e.g. to avoid overlap with arrowhead markers. With *auto* the lines would trim before markers if `marker.angleref` is set to *previous*.", + "dflt": "auto", + "editType": "plot", + "min": 0, + "valType": "number" + }, + "backoffsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the line color.", + "editType": "style", + "valType": "color" + }, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, + "editType": "calc", + "role": "object", + "shape": { + "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes.", + "dflt": "linear", + "editType": "plot", + "valType": "enumerated", + "values": [ + "linear", + "spline" + ] + }, + "smoothing": { + "description": "Has an effect only if `shape` is set to *spline* Sets the amount of smoothing. *0* corresponds to no smoothing (equivalent to a *linear* shape).", + "dflt": 1, + "editType": "plot", + "max": 1.3, + "min": 0, + "valType": "number" + }, + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "marker": { + "angle": { + "arrayOk": true, + "description": "Sets the marker angle in respect to `angleref`.", + "dflt": 0, + "editType": "plot", + "valType": "angle" + }, + "angleref": { + "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen.", + "dflt": "up", + "editType": "plot", + "valType": "enumerated", + "values": [ + "previous", + "up" + ] + }, + "anglesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `angle`.", + "editType": "none", + "valType": "string" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "style", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "gradient": { + "color": { + "arrayOk": true, + "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", + "editType": "calc", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "role": "object", + "type": { + "arrayOk": true, + "description": "Sets the type of gradient used to fill the markers", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "radial", + "horizontal", + "vertical", + "none" + ] + }, + "typesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `type`.", + "editType": "none", + "valType": "string" + } + }, + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "style", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "widthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `width`.", + "editType": "none", + "valType": "string" + } + }, + "maxdisplayed": { + "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", + "values": [ + "diameter", + "area" + ] + }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "standoff": { + "arrayOk": true, + "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "standoffsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", + "dflt": "circle", + "editType": "style", + "valType": "enumerated", + "values": [ + 0, + "0", + "circle", + 100, + "100", + "circle-open", + 200, + "200", + "circle-dot", + 300, + "300", + "circle-open-dot", + 1, + "1", + "square", + 101, + "101", + "square-open", + 201, + "201", + "square-dot", + 301, + "301", + "square-open-dot", + 2, + "2", + "diamond", + 102, + "102", + "diamond-open", + 202, + "202", + "diamond-dot", + 302, + "302", + "diamond-open-dot", + 3, + "3", + "cross", + 103, + "103", + "cross-open", + 203, + "203", + "cross-dot", + 303, + "303", + "cross-open-dot", + 4, + "4", + "x", + 104, + "104", + "x-open", + 204, + "204", + "x-dot", + 304, + "304", + "x-open-dot", + 5, + "5", + "triangle-up", + 105, + "105", + "triangle-up-open", + 205, + "205", + "triangle-up-dot", + 305, + "305", + "triangle-up-open-dot", + 6, + "6", + "triangle-down", + 106, + "106", + "triangle-down-open", + 206, + "206", + "triangle-down-dot", + 306, + "306", + "triangle-down-open-dot", + 7, + "7", + "triangle-left", + 107, + "107", + "triangle-left-open", + 207, + "207", + "triangle-left-dot", + 307, + "307", + "triangle-left-open-dot", + 8, + "8", + "triangle-right", + 108, + "108", + "triangle-right-open", + 208, + "208", + "triangle-right-dot", + 308, + "308", + "triangle-right-open-dot", + 9, + "9", + "triangle-ne", + 109, + "109", + "triangle-ne-open", + 209, + "209", + "triangle-ne-dot", + 309, + "309", + "triangle-ne-open-dot", + 10, + "10", + "triangle-se", + 110, + "110", + "triangle-se-open", + 210, + "210", + "triangle-se-dot", + 310, + "310", + "triangle-se-open-dot", + 11, + "11", + "triangle-sw", + 111, + "111", + "triangle-sw-open", + 211, + "211", + "triangle-sw-dot", + 311, + "311", + "triangle-sw-open-dot", + 12, + "12", + "triangle-nw", + 112, + "112", + "triangle-nw-open", + 212, + "212", + "triangle-nw-dot", + 312, + "312", + "triangle-nw-open-dot", + 13, + "13", + "pentagon", + 113, + "113", + "pentagon-open", + 213, + "213", + "pentagon-dot", + 313, + "313", + "pentagon-open-dot", + 14, + "14", + "hexagon", + 114, + "114", + "hexagon-open", + 214, + "214", + "hexagon-dot", + 314, + "314", + "hexagon-open-dot", + 15, + "15", + "hexagon2", + 115, + "115", + "hexagon2-open", + 215, + "215", + "hexagon2-dot", + 315, + "315", + "hexagon2-open-dot", + 16, + "16", + "octagon", + 116, + "116", + "octagon-open", + 216, + "216", + "octagon-dot", + 316, + "316", + "octagon-open-dot", + 17, + "17", + "star", + 117, + "117", + "star-open", + 217, + "217", + "star-dot", + 317, + "317", + "star-open-dot", + 18, + "18", + "hexagram", + 118, + "118", + "hexagram-open", + 218, + "218", + "hexagram-dot", + 318, + "318", + "hexagram-open-dot", + 19, + "19", + "star-triangle-up", + 119, + "119", + "star-triangle-up-open", + 219, + "219", + "star-triangle-up-dot", + 319, + "319", + "star-triangle-up-open-dot", + 20, + "20", + "star-triangle-down", + 120, + "120", + "star-triangle-down-open", + 220, + "220", + "star-triangle-down-dot", + 320, + "320", + "star-triangle-down-open-dot", + 21, + "21", + "star-square", + 121, + "121", + "star-square-open", + 221, + "221", + "star-square-dot", + 321, + "321", + "star-square-open-dot", + 22, + "22", + "star-diamond", + 122, + "122", + "star-diamond-open", + 222, + "222", + "star-diamond-dot", + 322, + "322", + "star-diamond-open-dot", + 23, + "23", + "diamond-tall", + 123, + "123", + "diamond-tall-open", + 223, + "223", + "diamond-tall-dot", + 323, + "323", + "diamond-tall-open-dot", + 24, + "24", + "diamond-wide", + 124, + "124", + "diamond-wide-open", + 224, + "224", + "diamond-wide-dot", + 324, + "324", + "diamond-wide-open-dot", + 25, + "25", + "hourglass", + 125, + "125", + "hourglass-open", + 26, + "26", + "bowtie", + 126, + "126", + "bowtie-open", + 27, + "27", + "circle-cross", + 127, + "127", + "circle-cross-open", + 28, + "28", + "circle-x", + 128, + "128", + "circle-x-open", + 29, + "29", + "square-cross", + 129, + "129", + "square-cross-open", + 30, + "30", + "square-x", + 130, + "130", + "square-x-open", + 31, + "31", + "diamond-cross", + 131, + "131", + "diamond-cross-open", + 32, + "32", + "diamond-x", + 132, + "132", + "diamond-x-open", + 33, + "33", + "cross-thin", + 133, + "133", + "cross-thin-open", + 34, + "34", + "x-thin", + 134, + "134", + "x-thin-open", + 35, + "35", + "asterisk", + 135, + "135", + "asterisk-open", + 36, + "36", + "hash", + 136, + "136", + "hash-open", + 236, + "236", + "hash-dot", + 336, + "336", + "hash-open-dot", + 37, + "37", + "y-up", + 137, + "137", + "y-up-open", + 38, + "38", + "y-down", + 138, + "138", + "y-down-open", + 39, + "39", + "y-left", + 139, + "139", + "y-left-open", + 40, + "40", + "y-right", + 140, + "140", + "y-right-open", + 41, + "41", + "line-ew", + 141, + "141", + "line-ew-open", + 42, + "42", + "line-ns", + 142, + "142", + "line-ns-open", + 43, + "43", + "line-ne", + 143, + "143", + "line-ne-open", + 44, + "44", + "line-nw", + 144, + "144", + "line-nw-open", + 45, + "45", + "arrow-up", + 145, + "145", + "arrow-up-open", + 46, + "46", + "arrow-down", + 146, + "146", + "arrow-down-open", + 47, + "47", + "arrow-left", + 147, + "147", + "arrow-left-open", + 48, + "48", + "arrow-right", + 148, + "148", + "arrow-right-open", + 49, + "49", + "arrow-bar-up", + 149, + "149", + "arrow-bar-up-open", + 50, + "50", + "arrow-bar-down", + 150, + "150", + "arrow-bar-down-open", + 51, + "51", + "arrow-bar-left", + 151, + "151", + "arrow-bar-left-open", + 52, + "52", + "arrow-bar-right", + 152, + "152", + "arrow-bar-right-open", + 53, + "53", + "arrow", + 153, + "153", + "arrow-open", + 54, + "54", + "arrow-wide", + 154, + "154", + "arrow-wide-open" + ] + }, + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "r": { + "description": "Sets the radial coordinates", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "r0": { + "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "rsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `r`.", + "editType": "none", + "valType": "string" + }, + "selected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of selected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "subplot": { + "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", + "dflt": "polar", + "editType": "calc", + "valType": "subplotid" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textposition": { + "arrayOk": true, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textpositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", + "editType": "none", + "valType": "string" + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", + "dflt": "", + "editType": "plot", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "theta": { + "description": "Sets the angular coordinates", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "theta0": { + "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "thetasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `theta`.", + "editType": "none", + "valType": "string" + }, + "thetaunit": { + "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes.", + "dflt": "degrees", + "editType": "calc+clearAxisTypes", + "valType": "enumerated", + "values": [ + "radians", + "degrees", + "gradians" + ] + }, + "type": "scatterpolar", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "polar", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "The scatterpolar trace type encompasses line charts, scatter charts, text charts, and bubble charts in polar coordinates. The data visualized as scatter point or lines is set in `r` (radial) and `theta` (angular) coordinates Text (appearing either on the chart or on hover only) is via `text`. Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", + "hrName": "scatter_polar" + }, + "type": "scatterpolar" + }, + "scatterpolargl": { + "animatable": false, + "attributes": { + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "dr": { + "description": "Sets the r coordinate step.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "dtheta": { + "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates.", + "editType": "calc", + "valType": "number" + }, + "fill": { + "description": "Sets the area to fill with a solid color. Defaults to *none* unless this trace is stacked, then it gets *tonexty* (*tonextx*) if `orientation` is *v* (*h*) Use with `fillcolor` if not *none*. *tozerox* and *tozeroy* fill to x=0 and y=0 respectively. *tonextx* and *tonexty* fill between the endpoints of this trace and the endpoints of the trace before it, connecting those endpoints with straight lines (to make a stacked area graph); if there is no trace before it, they behave like *tozerox* and *tozeroy*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other. Traces in a `stackgroup` will only fill to (or be filled to) other traces in the same group. With multiple `stackgroup`s or some traces stacked and some not, if fill-linked traces are not already consecutive, the later ones will be pushed down in the drawing order.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "tozeroy", + "tozerox", + "tonexty", + "tonextx", + "toself", + "tonext" + ] + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "calc", + "valType": "color" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "r", + "theta", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "hovertextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "color": { + "description": "Sets the line color.", + "editType": "calc", + "valType": "color" + }, + "dash": { + "description": "Sets the style of the lines.", + "dflt": "solid", + "editType": "calc", + "valType": "enumerated", + "values": [ + "dash", + "dashdot", + "dot", + "longdash", + "longdashdot", + "solid" + ] + }, + "editType": "calc", + "role": "object", + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "marker": { + "angle": { + "arrayOk": true, + "description": "Sets the marker angle in respect to `angleref`.", + "dflt": 0, + "editType": "calc", + "valType": "angle" + }, + "anglesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `angle`.", + "editType": "none", + "valType": "string" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "calc", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "calc", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "calc", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "calc", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "calc", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "calc", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "calc", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "calc", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "calc", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "calc", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "calc", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "calc", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "calc", + "font": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "calc", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "editType": "calc", + "min": 0, + "valType": "number" + }, + "widthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `width`.", + "editType": "none", + "valType": "string" + } + }, + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", + "values": [ + "diameter", + "area" + ] + }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", + "dflt": "circle", + "editType": "calc", + "valType": "enumerated", + "values": [ + 0, + "0", + "circle", + 100, + "100", + "circle-open", + 200, + "200", + "circle-dot", + 300, + "300", + "circle-open-dot", + 1, + "1", + "square", + 101, + "101", + "square-open", + 201, + "201", + "square-dot", + 301, + "301", + "square-open-dot", + 2, + "2", + "diamond", + 102, + "102", + "diamond-open", + 202, + "202", + "diamond-dot", + 302, + "302", + "diamond-open-dot", + 3, + "3", + "cross", + 103, + "103", + "cross-open", + 203, + "203", + "cross-dot", + 303, + "303", + "cross-open-dot", + 4, + "4", + "x", + 104, + "104", + "x-open", + 204, + "204", + "x-dot", + 304, + "304", + "x-open-dot", + 5, + "5", + "triangle-up", + 105, + "105", + "triangle-up-open", + 205, + "205", + "triangle-up-dot", + 305, + "305", + "triangle-up-open-dot", + 6, + "6", + "triangle-down", + 106, + "106", + "triangle-down-open", + 206, + "206", + "triangle-down-dot", + 306, + "306", + "triangle-down-open-dot", + 7, + "7", + "triangle-left", + 107, + "107", + "triangle-left-open", + 207, + "207", + "triangle-left-dot", + 307, + "307", + "triangle-left-open-dot", + 8, + "8", + "triangle-right", + 108, + "108", + "triangle-right-open", + 208, + "208", + "triangle-right-dot", + 308, + "308", + "triangle-right-open-dot", + 9, + "9", + "triangle-ne", + 109, + "109", + "triangle-ne-open", + 209, + "209", + "triangle-ne-dot", + 309, + "309", + "triangle-ne-open-dot", + 10, + "10", + "triangle-se", + 110, + "110", + "triangle-se-open", + 210, + "210", + "triangle-se-dot", + 310, + "310", + "triangle-se-open-dot", + 11, + "11", + "triangle-sw", + 111, + "111", + "triangle-sw-open", + 211, + "211", + "triangle-sw-dot", + 311, + "311", + "triangle-sw-open-dot", + 12, + "12", + "triangle-nw", + 112, + "112", + "triangle-nw-open", + 212, + "212", + "triangle-nw-dot", + 312, + "312", + "triangle-nw-open-dot", + 13, + "13", + "pentagon", + 113, + "113", + "pentagon-open", + 213, + "213", + "pentagon-dot", + 313, + "313", + "pentagon-open-dot", + 14, + "14", + "hexagon", + 114, + "114", + "hexagon-open", + 214, + "214", + "hexagon-dot", + 314, + "314", + "hexagon-open-dot", + 15, + "15", + "hexagon2", + 115, + "115", + "hexagon2-open", + 215, + "215", + "hexagon2-dot", + 315, + "315", + "hexagon2-open-dot", + 16, + "16", + "octagon", + 116, + "116", + "octagon-open", + 216, + "216", + "octagon-dot", + 316, + "316", + "octagon-open-dot", + 17, + "17", + "star", + 117, + "117", + "star-open", + 217, + "217", + "star-dot", + 317, + "317", + "star-open-dot", + 18, + "18", + "hexagram", + 118, + "118", + "hexagram-open", + 218, + "218", + "hexagram-dot", + 318, + "318", + "hexagram-open-dot", + 19, + "19", + "star-triangle-up", + 119, + "119", + "star-triangle-up-open", + 219, + "219", + "star-triangle-up-dot", + 319, + "319", + "star-triangle-up-open-dot", + 20, + "20", + "star-triangle-down", + 120, + "120", + "star-triangle-down-open", + 220, + "220", + "star-triangle-down-dot", + 320, + "320", + "star-triangle-down-open-dot", + 21, + "21", + "star-square", + 121, + "121", + "star-square-open", + 221, + "221", + "star-square-dot", + 321, + "321", + "star-square-open-dot", + 22, + "22", + "star-diamond", + 122, + "122", + "star-diamond-open", + 222, + "222", + "star-diamond-dot", + 322, + "322", + "star-diamond-open-dot", + 23, + "23", + "diamond-tall", + 123, + "123", + "diamond-tall-open", + 223, + "223", + "diamond-tall-dot", + 323, + "323", + "diamond-tall-open-dot", + 24, + "24", + "diamond-wide", + 124, + "124", + "diamond-wide-open", + 224, + "224", + "diamond-wide-dot", + 324, + "324", + "diamond-wide-open-dot", + 25, + "25", + "hourglass", + 125, + "125", + "hourglass-open", + 26, + "26", + "bowtie", + 126, + "126", + "bowtie-open", + 27, + "27", + "circle-cross", + 127, + "127", + "circle-cross-open", + 28, + "28", + "circle-x", + 128, + "128", + "circle-x-open", + 29, + "29", + "square-cross", + 129, + "129", + "square-cross-open", + 30, + "30", + "square-x", + 130, + "130", + "square-x-open", + 31, + "31", + "diamond-cross", + 131, + "131", + "diamond-cross-open", + 32, + "32", + "diamond-x", + 132, + "132", + "diamond-x-open", + 33, + "33", + "cross-thin", + 133, + "133", + "cross-thin-open", + 34, + "34", + "x-thin", + 134, + "134", + "x-thin-open", + 35, + "35", + "asterisk", + 135, + "135", + "asterisk-open", + 36, + "36", + "hash", + 136, + "136", + "hash-open", + 236, + "236", + "hash-dot", + 336, + "336", + "hash-open-dot", + 37, + "37", + "y-up", + 137, + "137", + "y-up-open", + 38, + "38", + "y-down", + 138, + "138", + "y-down-open", + 39, + "39", + "y-left", + 139, + "139", + "y-left-open", + 40, + "40", + "y-right", + 140, + "140", + "y-right-open", + 41, + "41", + "line-ew", + 141, + "141", + "line-ew-open", + 42, + "42", + "line-ns", + 142, + "142", + "line-ns-open", + 43, + "43", + "line-ne", + 143, + "143", + "line-ne-open", + 44, + "44", + "line-nw", + 144, + "144", + "line-nw-open", + 45, + "45", + "arrow-up", + 145, + "145", + "arrow-up-open", + 46, + "46", + "arrow-down", + 146, + "146", + "arrow-down-open", + 47, + "47", + "arrow-left", + 147, + "147", + "arrow-left-open", + 48, + "48", + "arrow-right", + 148, + "148", + "arrow-right-open", + 49, + "49", + "arrow-bar-up", + 149, + "149", + "arrow-bar-up-open", + 50, + "50", + "arrow-bar-down", + 150, + "150", + "arrow-bar-down-open", + 51, + "51", + "arrow-bar-left", + 151, + "151", + "arrow-bar-left-open", + 52, + "52", + "arrow-bar-right", + 152, + "152", + "arrow-bar-right-open", + 53, + "53", + "arrow", + 153, + "153", + "arrow-open", + 54, + "54", + "arrow-wide", + 154, + "154", + "arrow-wide-open" + ] + }, + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "r": { + "description": "Sets the radial coordinates", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "r0": { + "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "rsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `r`.", + "editType": "none", + "valType": "string" + }, + "selected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of selected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "subplot": { + "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", + "dflt": "polar", + "editType": "calc", + "valType": "subplotid" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "calc", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "bold" + ] + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textposition": { + "arrayOk": true, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textpositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", + "editType": "none", + "valType": "string" + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", + "dflt": "", + "editType": "plot", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "theta": { + "description": "Sets the angular coordinates", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "theta0": { + "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "thetasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `theta`.", + "editType": "none", + "valType": "string" + }, + "thetaunit": { + "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes.", + "dflt": "degrees", + "editType": "calc+clearAxisTypes", + "valType": "enumerated", + "values": [ + "radians", + "degrees", + "gradians" + ] + }, + "type": "scatterpolargl", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "gl", + "regl", + "polar", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "The scatterpolargl trace type encompasses line charts, scatter charts, and bubble charts in polar coordinates using the WebGL plotting engine. The data visualized as scatter point or lines is set in `r` (radial) and `theta` (angular) coordinates Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", + "hrName": "scatter_polar_gl" + }, + "type": "scatterpolargl" + }, + "quiver": { + "animatable": true, + "attributes": { + "angle": { + "description": "Angle of arrowhead in radians. Default = π/9", + "dflt": 0.3490658503988659, + "editType": "calc", + "max": 1.5707963267948966, + "min": 0, + "valType": "number" + }, + "arrow_scale": { + "description": "Value multiplied to length of barb to get length of arrowhead. Default = 0.3", + "dflt": 0.3, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "hoverdistance": { + "description": "Maximum distance (in pixels) to look for nearby arrows on hover.", + "dflt": 20, + "editType": "calc", + "min": -1, + "valType": "number" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "u", + "v", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `u`, `v`, `text` and `name`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "ids": { + "anim": true, + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "color": { + "description": "Sets the color of the arrow lines.", + "dflt": "#000", + "editType": "style", + "valType": "color" + }, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, + "editType": "style", + "role": "object", + "shape": { + "description": "Determines the line shape.", + "dflt": "linear", + "editType": "plot", + "valType": "enumerated", + "values": [ + "linear", + "spline", + "hv", + "vh", + "hvh", + "vhv" + ] + }, + "simplify": { + "description": "Simplifies lines by removing nearly-overlapping points.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + }, + "smoothing": { + "description": "Has an effect only if `shape` is set to *spline*. Sets the amount of smoothing.", + "dflt": 1, + "editType": "plot", + "max": 1.3, + "min": 0, + "valType": "number" + }, + "width": { + "description": "Sets the width (in px) of the arrow lines.", + "dflt": 1, + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "scale": { + "description": "Scales size of the arrows (ideally to avoid overlap). Default = 0.1", + "dflt": 0.1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "scaleratio": { + "description": "The ratio between the scale of the y-axis and the scale of the x-axis (scale_y / scale_x). Default = null, the scale ratio is not fixed.", + "editType": "calc", + "min": 0, + "valType": "number" + }, + "selected": { + "editType": "style", + "line": { + "color": { + "description": "Sets the line color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width of selected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "text": { + "anim": true, + "description": "Sets text elements associated with each (x,y) pair.", + "editType": "calc", + "valType": "data_array" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textposition": { + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "type": "quiver", + "u": { + "anim": true, + "description": "Sets the x components of the arrow vectors.", + "editType": "calc", + "valType": "data_array" + }, + "uid": { + "anim": true, + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "style", + "line": { + "color": { + "description": "Sets the line color of unselected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width of unselected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "usrc": { + "description": "Sets the source reference on Chart Studio Cloud for `u`.", + "editType": "none", + "valType": "string" + }, + "v": { + "anim": true, + "description": "Sets the y components of the arrow vectors.", + "editType": "calc", + "valType": "data_array" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + }, + "vsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `v`.", + "editType": "none", + "valType": "string" + }, + "x": { + "anim": true, + "description": "Sets the x coordinates of the arrow locations.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid" + }, + "xsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `x`.", + "editType": "none", + "valType": "string" + }, + "y": { + "anim": true, + "description": "Sets the y coordinates of the arrow locations.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", + "editType": "calc+clearAxisTypes", + "valType": "subplotid" + }, + "ysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `y`.", + "editType": "none", + "valType": "string" + } + }, + "categories": [ + "cartesian", + "svg", + "showLegend", + "scatter-like", + "zoomScale" + ], + "meta": { + "description": "The quiver trace type visualizes vector fields using arrows. Specify a vector field using 4 1D arrays: 2 position arrays `x`, `y` and 2 vector component arrays `u`, `v`. The arrows are drawn exactly at the positions given by `x` and `y`. Arrow length and direction are determined by `u` and `v` components." + }, + "type": "quiver" + }, + "scattersmith": { + "animatable": false, + "attributes": { + "cliponaxis": { + "description": "Determines whether or not markers and text nodes are clipped about the subplot axes. To show markers and text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "fill": { + "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. scattersmith has a subset of the options available to scatter. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "toself", + "tonext" + ] + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "style", + "valType": "color" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "real", + "imag", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "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*.", + "editType": "style", + "flags": [ + "points", + "fills" + ], + "valType": "flaglist" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "hovertextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "imag": { + "description": "Sets the imaginary component of the data, in units of normalized impedance such that real=1, imag=0 is the center of the chart.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "imagsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `imag`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "backoff": { + "arrayOk": true, + "description": "Sets the line back off from the end point of the nth line segment (in px). This option is useful e.g. to avoid overlap with arrowhead markers. With *auto* the lines would trim before markers if `marker.angleref` is set to *previous*.", + "dflt": "auto", + "editType": "plot", + "min": 0, + "valType": "number" + }, + "backoffsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the line color.", + "editType": "style", + "valType": "color" + }, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, + "editType": "calc", + "role": "object", + "shape": { + "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes.", + "dflt": "linear", + "editType": "plot", + "valType": "enumerated", + "values": [ + "linear", + "spline" + ] + }, + "smoothing": { + "description": "Has an effect only if `shape` is set to *spline* Sets the amount of smoothing. *0* corresponds to no smoothing (equivalent to a *linear* shape).", + "dflt": 1, + "editType": "plot", + "max": 1.3, + "min": 0, + "valType": "number" + }, + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "marker": { + "angle": { + "arrayOk": true, + "description": "Sets the marker angle in respect to `angleref`.", + "dflt": 0, + "editType": "plot", + "valType": "angle" + }, + "angleref": { + "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen.", + "dflt": "up", + "editType": "plot", + "valType": "enumerated", + "values": [ + "previous", + "up" + ] + }, + "anglesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `angle`.", + "editType": "none", + "valType": "string" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "style", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "gradient": { + "color": { + "arrayOk": true, + "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", + "editType": "calc", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "role": "object", + "type": { + "arrayOk": true, + "description": "Sets the type of gradient used to fill the markers", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "radial", + "horizontal", + "vertical", + "none" + ] + }, + "typesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `type`.", + "editType": "none", + "valType": "string" + } + }, + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "style", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "widthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `width`.", + "editType": "none", + "valType": "string" + } + }, + "maxdisplayed": { + "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", + "values": [ + "diameter", + "area" + ] + }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "standoff": { + "arrayOk": true, + "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "standoffsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", + "dflt": "circle", + "editType": "style", + "valType": "enumerated", + "values": [ + 0, + "0", + "circle", + 100, + "100", + "circle-open", + 200, + "200", + "circle-dot", + 300, + "300", + "circle-open-dot", + 1, + "1", + "square", + 101, + "101", + "square-open", + 201, + "201", + "square-dot", + 301, + "301", + "square-open-dot", + 2, + "2", + "diamond", + 102, + "102", + "diamond-open", + 202, + "202", + "diamond-dot", + 302, + "302", + "diamond-open-dot", + 3, + "3", + "cross", + 103, + "103", + "cross-open", + 203, + "203", + "cross-dot", + 303, + "303", + "cross-open-dot", + 4, + "4", + "x", + 104, + "104", + "x-open", + 204, + "204", + "x-dot", + 304, + "304", + "x-open-dot", + 5, + "5", + "triangle-up", + 105, + "105", + "triangle-up-open", + 205, + "205", + "triangle-up-dot", + 305, + "305", + "triangle-up-open-dot", + 6, + "6", + "triangle-down", + 106, + "106", + "triangle-down-open", + 206, + "206", + "triangle-down-dot", + 306, + "306", + "triangle-down-open-dot", + 7, + "7", + "triangle-left", + 107, + "107", + "triangle-left-open", + 207, + "207", + "triangle-left-dot", + 307, + "307", + "triangle-left-open-dot", + 8, + "8", + "triangle-right", + 108, + "108", + "triangle-right-open", + 208, + "208", + "triangle-right-dot", + 308, + "308", + "triangle-right-open-dot", + 9, + "9", + "triangle-ne", + 109, + "109", + "triangle-ne-open", + 209, + "209", + "triangle-ne-dot", + 309, + "309", + "triangle-ne-open-dot", + 10, + "10", + "triangle-se", + 110, + "110", + "triangle-se-open", + 210, + "210", + "triangle-se-dot", + 310, + "310", + "triangle-se-open-dot", + 11, + "11", + "triangle-sw", + 111, + "111", + "triangle-sw-open", + 211, + "211", + "triangle-sw-dot", + 311, + "311", + "triangle-sw-open-dot", + 12, + "12", + "triangle-nw", + 112, + "112", + "triangle-nw-open", + 212, + "212", + "triangle-nw-dot", + 312, + "312", + "triangle-nw-open-dot", + 13, + "13", + "pentagon", + 113, + "113", + "pentagon-open", + 213, + "213", + "pentagon-dot", + 313, + "313", + "pentagon-open-dot", + 14, + "14", + "hexagon", + 114, + "114", + "hexagon-open", + 214, + "214", + "hexagon-dot", + 314, + "314", + "hexagon-open-dot", + 15, + "15", + "hexagon2", + 115, + "115", + "hexagon2-open", + 215, + "215", + "hexagon2-dot", + 315, + "315", + "hexagon2-open-dot", + 16, + "16", + "octagon", + 116, + "116", + "octagon-open", + 216, + "216", + "octagon-dot", + 316, + "316", + "octagon-open-dot", + 17, + "17", + "star", + 117, + "117", + "star-open", + 217, + "217", + "star-dot", + 317, + "317", + "star-open-dot", + 18, + "18", + "hexagram", + 118, + "118", + "hexagram-open", + 218, + "218", + "hexagram-dot", + 318, + "318", + "hexagram-open-dot", + 19, + "19", + "star-triangle-up", + 119, + "119", + "star-triangle-up-open", + 219, + "219", + "star-triangle-up-dot", + 319, + "319", + "star-triangle-up-open-dot", + 20, + "20", + "star-triangle-down", + 120, + "120", + "star-triangle-down-open", + 220, + "220", + "star-triangle-down-dot", + 320, + "320", + "star-triangle-down-open-dot", + 21, + "21", + "star-square", + 121, + "121", + "star-square-open", + 221, + "221", + "star-square-dot", + 321, + "321", + "star-square-open-dot", + 22, + "22", + "star-diamond", + 122, + "122", + "star-diamond-open", + 222, + "222", + "star-diamond-dot", + 322, + "322", + "star-diamond-open-dot", + 23, + "23", + "diamond-tall", + 123, + "123", + "diamond-tall-open", + 223, + "223", + "diamond-tall-dot", + 323, + "323", + "diamond-tall-open-dot", + 24, + "24", + "diamond-wide", + 124, + "124", + "diamond-wide-open", + 224, + "224", + "diamond-wide-dot", + 324, + "324", + "diamond-wide-open-dot", + 25, + "25", + "hourglass", + 125, + "125", + "hourglass-open", + 26, + "26", + "bowtie", + 126, + "126", + "bowtie-open", + 27, + "27", + "circle-cross", + 127, + "127", + "circle-cross-open", + 28, + "28", + "circle-x", + 128, + "128", + "circle-x-open", + 29, + "29", + "square-cross", + 129, + "129", + "square-cross-open", + 30, + "30", + "square-x", + 130, + "130", + "square-x-open", + 31, + "31", + "diamond-cross", + 131, + "131", + "diamond-cross-open", + 32, + "32", + "diamond-x", + 132, + "132", + "diamond-x-open", + 33, + "33", + "cross-thin", + 133, + "133", + "cross-thin-open", + 34, + "34", + "x-thin", + 134, + "134", + "x-thin-open", + 35, + "35", + "asterisk", + 135, + "135", + "asterisk-open", + 36, + "36", + "hash", + 136, + "136", + "hash-open", + 236, + "236", + "hash-dot", + 336, + "336", + "hash-open-dot", + 37, + "37", + "y-up", + 137, + "137", + "y-up-open", + 38, + "38", + "y-down", + 138, + "138", + "y-down-open", + 39, + "39", + "y-left", + 139, + "139", + "y-left-open", + 40, + "40", + "y-right", + 140, + "140", + "y-right-open", + 41, + "41", + "line-ew", + 141, + "141", + "line-ew-open", + 42, + "42", + "line-ns", + 142, + "142", + "line-ns-open", + 43, + "43", + "line-ne", + 143, + "143", + "line-ne-open", + 44, + "44", + "line-nw", + 144, + "144", + "line-nw-open", + 45, + "45", + "arrow-up", + 145, + "145", + "arrow-up-open", + 46, + "46", + "arrow-down", + 146, + "146", + "arrow-down-open", + 47, + "47", + "arrow-left", + 147, + "147", + "arrow-left-open", + 48, + "48", + "arrow-right", + 148, + "148", + "arrow-right-open", + 49, + "49", + "arrow-bar-up", + 149, + "149", + "arrow-bar-up-open", + 50, + "50", + "arrow-bar-down", + 150, + "150", + "arrow-bar-down-open", + 51, + "51", + "arrow-bar-left", + 151, + "151", + "arrow-bar-left-open", + 52, + "52", + "arrow-bar-right", + 152, + "152", + "arrow-bar-right-open", + 53, + "53", + "arrow", + 153, + "153", + "arrow-open", + 54, + "54", + "arrow-wide", + 154, + "154", + "arrow-wide-open" + ] + }, + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "real": { + "description": "Sets the real component of the data, in units of normalized impedance such that real=1, imag=0 is the center of the chart.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "realsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `real`.", + "editType": "none", + "valType": "string" + }, + "selected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of selected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "subplot": { + "description": "Sets a reference between this trace's data coordinates and a smith subplot. If *smith* (the default value), the data refer to `layout.smith`. If *smith2*, the data refer to `layout.smith2`, and so on.", + "dflt": "smith", + "editType": "calc", + "valType": "subplotid" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textposition": { + "arrayOk": true, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textpositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", + "editType": "none", + "valType": "string" + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `real`, `imag` and `text`.", + "dflt": "", + "editType": "plot", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "type": "scattersmith", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "smith", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "The scattersmith trace type encompasses line charts, scatter charts, text charts, and bubble charts in smith coordinates. The data visualized as scatter point or lines is set in `real` and `imag` (imaginary) coordinates Text (appearing either on the chart or on hover only) is via `text`. Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", + "hrName": "scatter_smith" + }, + "type": "scattersmith" + }, + "scatterternary": { + "animatable": false, + "attributes": { + "a": { + "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", + "editType": "calc", + "valType": "data_array" + }, + "asrc": { + "description": "Sets the source reference on Chart Studio Cloud for `a`.", + "editType": "none", + "valType": "string" + }, + "b": { + "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", + "editType": "calc", + "valType": "data_array" + }, + "bsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `b`.", + "editType": "none", + "valType": "string" + }, + "c": { + "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", + "editType": "calc", + "valType": "data_array" + }, + "cliponaxis": { + "description": "Determines whether or not markers and text nodes are clipped about the subplot axes. To show markers and text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + }, + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "csrc": { + "description": "Sets the source reference on Chart Studio Cloud for `c`.", + "editType": "none", + "valType": "string" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "fill": { + "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. scatterternary has a subset of the options available to scatter. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "toself", + "tonext" + ] + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "style", + "valType": "color" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "a", + "b", + "c", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "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*.", + "editType": "style", + "flags": [ + "points", + "fills" + ], + "valType": "flaglist" + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c). To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "hovertextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "backoff": { + "arrayOk": true, + "description": "Sets the line back off from the end point of the nth line segment (in px). This option is useful e.g. to avoid overlap with arrowhead markers. With *auto* the lines would trim before markers if `marker.angleref` is set to *previous*.", + "dflt": "auto", + "editType": "plot", + "min": 0, + "valType": "number" + }, + "backoffsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the line color.", + "editType": "style", + "valType": "color" + }, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, + "editType": "calc", + "role": "object", + "shape": { + "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes.", + "dflt": "linear", + "editType": "plot", + "valType": "enumerated", + "values": [ + "linear", + "spline" + ] + }, + "smoothing": { + "description": "Has an effect only if `shape` is set to *spline* Sets the amount of smoothing. *0* corresponds to no smoothing (equivalent to a *linear* shape).", + "dflt": 1, + "editType": "plot", + "max": 1.3, + "min": 0, + "valType": "number" + }, + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "marker": { + "angle": { + "arrayOk": true, + "description": "Sets the marker angle in respect to `angleref`.", + "dflt": 0, + "editType": "plot", + "valType": "angle" + }, + "angleref": { + "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen.", + "dflt": "up", + "editType": "plot", + "valType": "enumerated", + "values": [ + "previous", + "up" + ] + }, + "anglesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `angle`.", + "editType": "none", + "valType": "string" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "style", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "gradient": { + "color": { + "arrayOk": true, + "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", + "editType": "calc", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "role": "object", + "type": { + "arrayOk": true, + "description": "Sets the type of gradient used to fill the markers", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "radial", + "horizontal", + "vertical", + "none" + ] + }, + "typesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `type`.", + "editType": "none", + "valType": "string" + } + }, + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "plot", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "style", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "widthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `width`.", + "editType": "none", + "valType": "string" + } + }, + "maxdisplayed": { + "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", + "values": [ + "diameter", + "area" + ] + }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "standoff": { + "arrayOk": true, + "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "standoffsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", + "dflt": "circle", + "editType": "style", + "valType": "enumerated", + "values": [ + 0, + "0", + "circle", + 100, + "100", + "circle-open", + 200, + "200", + "circle-dot", + 300, + "300", + "circle-open-dot", + 1, + "1", + "square", + 101, + "101", + "square-open", + 201, + "201", + "square-dot", + 301, + "301", + "square-open-dot", + 2, + "2", + "diamond", + 102, + "102", + "diamond-open", + 202, + "202", + "diamond-dot", + 302, + "302", + "diamond-open-dot", + 3, + "3", + "cross", + 103, + "103", + "cross-open", + 203, + "203", + "cross-dot", + 303, + "303", + "cross-open-dot", + 4, + "4", + "x", + 104, + "104", + "x-open", + 204, + "204", + "x-dot", + 304, + "304", + "x-open-dot", + 5, + "5", + "triangle-up", + 105, + "105", + "triangle-up-open", + 205, + "205", + "triangle-up-dot", + 305, + "305", + "triangle-up-open-dot", + 6, + "6", + "triangle-down", + 106, + "106", + "triangle-down-open", + 206, + "206", + "triangle-down-dot", + 306, + "306", + "triangle-down-open-dot", + 7, + "7", + "triangle-left", + 107, + "107", + "triangle-left-open", + 207, + "207", + "triangle-left-dot", + 307, + "307", + "triangle-left-open-dot", + 8, + "8", + "triangle-right", + 108, + "108", + "triangle-right-open", + 208, + "208", + "triangle-right-dot", + 308, + "308", + "triangle-right-open-dot", + 9, + "9", + "triangle-ne", + 109, + "109", + "triangle-ne-open", + 209, + "209", + "triangle-ne-dot", + 309, + "309", + "triangle-ne-open-dot", + 10, + "10", + "triangle-se", + 110, + "110", + "triangle-se-open", + 210, + "210", + "triangle-se-dot", + 310, + "310", + "triangle-se-open-dot", + 11, + "11", + "triangle-sw", + 111, + "111", + "triangle-sw-open", + 211, + "211", + "triangle-sw-dot", + 311, + "311", + "triangle-sw-open-dot", + 12, + "12", + "triangle-nw", + 112, + "112", + "triangle-nw-open", + 212, + "212", + "triangle-nw-dot", + 312, + "312", + "triangle-nw-open-dot", + 13, + "13", + "pentagon", + 113, + "113", + "pentagon-open", + 213, + "213", + "pentagon-dot", + 313, + "313", + "pentagon-open-dot", + 14, + "14", + "hexagon", + 114, + "114", + "hexagon-open", + 214, + "214", + "hexagon-dot", + 314, + "314", + "hexagon-open-dot", + 15, + "15", + "hexagon2", + 115, + "115", + "hexagon2-open", + 215, + "215", + "hexagon2-dot", + 315, + "315", + "hexagon2-open-dot", + 16, + "16", + "octagon", + 116, + "116", + "octagon-open", + 216, + "216", + "octagon-dot", + 316, + "316", + "octagon-open-dot", + 17, + "17", + "star", + 117, + "117", + "star-open", + 217, + "217", + "star-dot", + 317, + "317", + "star-open-dot", + 18, + "18", + "hexagram", + 118, + "118", + "hexagram-open", + 218, + "218", + "hexagram-dot", + 318, + "318", + "hexagram-open-dot", + 19, + "19", + "star-triangle-up", + 119, + "119", + "star-triangle-up-open", + 219, + "219", + "star-triangle-up-dot", + 319, + "319", + "star-triangle-up-open-dot", + 20, + "20", + "star-triangle-down", + 120, + "120", + "star-triangle-down-open", + 220, + "220", + "star-triangle-down-dot", + 320, + "320", + "star-triangle-down-open-dot", + 21, + "21", + "star-square", + 121, + "121", + "star-square-open", + 221, + "221", + "star-square-dot", + 321, + "321", + "star-square-open-dot", + 22, + "22", + "star-diamond", + 122, + "122", + "star-diamond-open", + 222, + "222", + "star-diamond-dot", + 322, + "322", + "star-diamond-open-dot", + 23, + "23", + "diamond-tall", + 123, + "123", + "diamond-tall-open", + 223, + "223", + "diamond-tall-dot", + 323, + "323", + "diamond-tall-open-dot", + 24, + "24", + "diamond-wide", + 124, + "124", + "diamond-wide-open", + 224, + "224", + "diamond-wide-dot", + 324, + "324", + "diamond-wide-open-dot", + 25, + "25", + "hourglass", + 125, + "125", + "hourglass-open", + 26, + "26", + "bowtie", + 126, + "126", + "bowtie-open", + 27, + "27", + "circle-cross", + 127, + "127", + "circle-cross-open", + 28, + "28", + "circle-x", + 128, + "128", + "circle-x-open", + 29, + "29", + "square-cross", + 129, + "129", + "square-cross-open", + 30, + "30", + "square-x", + 130, + "130", + "square-x-open", + 31, + "31", + "diamond-cross", + 131, + "131", + "diamond-cross-open", + 32, + "32", + "diamond-x", + 132, + "132", + "diamond-x-open", + 33, + "33", + "cross-thin", + 133, + "133", + "cross-thin-open", + 34, + "34", + "x-thin", + 134, + "134", + "x-thin-open", + 35, + "35", + "asterisk", + 135, + "135", + "asterisk-open", + 36, + "36", + "hash", + 136, + "136", + "hash-open", + 236, + "236", + "hash-dot", + 336, + "336", + "hash-open-dot", + 37, + "37", + "y-up", + 137, + "137", + "y-up-open", + 38, + "38", + "y-down", + 138, + "138", + "y-down-open", + 39, + "39", + "y-left", + 139, + "139", + "y-left-open", + 40, + "40", + "y-right", + 140, + "140", + "y-right-open", + 41, + "41", + "line-ew", + 141, + "141", + "line-ew-open", + 42, + "42", + "line-ns", + 142, + "142", + "line-ns-open", + 43, + "43", + "line-ne", + 143, + "143", + "line-ne-open", + 44, + "44", + "line-nw", + 144, + "144", + "line-nw-open", + 45, + "45", + "arrow-up", + 145, + "145", + "arrow-up-open", + 46, + "46", + "arrow-down", + 146, + "146", + "arrow-down-open", + 47, + "47", + "arrow-left", + 147, + "147", + "arrow-left-open", + 48, + "48", + "arrow-right", + 148, + "148", + "arrow-right-open", + 49, + "49", + "arrow-bar-up", + 149, + "149", + "arrow-bar-up-open", + 50, + "50", + "arrow-bar-down", + 150, + "150", + "arrow-bar-down-open", + 51, + "51", + "arrow-bar-left", + 151, + "151", + "arrow-bar-left-open", + 52, + "52", + "arrow-bar-right", + 152, + "152", + "arrow-bar-right-open", + 53, + "53", + "arrow", + 153, + "153", + "arrow-open", + 54, + "54", + "arrow-wide", + 154, + "154", + "arrow-wide-open" + ] + }, + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", + "dflt": "markers", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "selected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of selected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "subplot": { + "description": "Sets a reference between this trace's data coordinates and a ternary subplot. If *ternary* (the default value), the data refer to `layout.ternary`. If *ternary2*, the data refer to `layout.ternary2`, and so on.", + "dflt": "ternary", + "editType": "calc", + "valType": "subplotid" + }, + "sum": { + "description": "The number each triplet should sum to, if only two of `a`, `b`, and `c` are provided. This overrides `ternary.sum` to normalize this specific trace, but does not affect the values displayed on the axes. 0 (or missing) means to use ternary.sum", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c). If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textposition": { + "arrayOk": true, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textpositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", + "editType": "none", + "valType": "string" + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `a`, `b`, `c` and `text`.", + "dflt": "", + "editType": "plot", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "type": "scatterternary", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "ternary", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "Provides similar functionality to the *scatter* type but on a ternary phase diagram. The data is provided by at least two arrays out of `a`, `b`, `c` triplets.", + "hrName": "scatter_ternary" + }, + "type": "scatterternary" + }, + "splom": { + "animatable": false, + "attributes": { + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "diagonal": { + "editType": "calc", + "role": "object", + "visible": { + "description": "Determines whether or not subplots on the diagonal are displayed.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + } + }, + "dimensions": { + "items": { + "dimension": { + "axis": { + "editType": "calc+clearAxisTypes", + "matches": { + "description": "Determines whether or not the x & y axes generated by this dimension match. Equivalent to setting the `matches` axis attribute in the layout with the correct axis id.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "role": "object", +>>>>>>> 776a4535b (Name plot type quiver not scatterquiver) "type": { "_noTemplating": true, "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question.", From fb01316c031f2a4f4b73ff68717c4e1c8b20ce5a Mon Sep 17 00:00:00 2001 From: John Degner Date: Sun, 2 Nov 2025 17:00:36 -0800 Subject: [PATCH 04/14] Model quiver api closer to 3d cone trace --- lib/quiver.js | 2 -- src/traces/quiver/attributes.js | 33 +++++++++++++++++--- src/traces/quiver/defaults.js | 6 +++- src/traces/quiver/plot.js | 53 ++++++++++++++++++++++++++++----- test/plot-schema.json | 30 ++++++++++++++++--- 5 files changed, 106 insertions(+), 18 deletions(-) diff --git a/lib/quiver.js b/lib/quiver.js index 0368a75e500..12179a54900 100644 --- a/lib/quiver.js +++ b/lib/quiver.js @@ -1,5 +1,3 @@ 'use strict'; module.exports = require('../src/traces/quiver'); - - diff --git a/src/traces/quiver/attributes.js b/src/traces/quiver/attributes.js index 5586bc37783..f7f3ffc2f74 100644 --- a/src/traces/quiver/attributes.js +++ b/src/traces/quiver/attributes.js @@ -32,13 +32,38 @@ var attrs = { anim: true, description: 'Sets the y components of the arrow vectors.' }, - scale: { + sizemode: { + valType: 'enumerated', + values: ['scaled', 'absolute', 'raw'], + editType: 'calc', + dflt: 'scaled', + description: [ + 'Determines whether `sizeref` is set as a *scaled* (unitless) scalar', + '(normalized by the max u/v norm in the vector field), as an *absolute*', + 'value (in the same units as the vector field), or *raw* to use the', + 'raw vector lengths.' + ].join(' ') + }, + sizeref: { valType: 'number', - dflt: 0.1, min: 0, - max: 1, editType: 'calc', - description: 'Scales size of the arrows (ideally to avoid overlap). Default = 0.1' + description: [ + 'Adjusts the arrow size scaling.', + 'The arrow length is determined by the vector norm multiplied by `sizeref`,', + 'optionally normalized when `sizemode` is *scaled*.' + ].join(' ') + }, + anchor: { + valType: 'enumerated', + values: ['tip', 'tail', 'cm', 'center', 'middle'], + dflt: 'tail', + editType: 'calc', + description: [ + 'Sets the arrows\' anchor with respect to their (x,y) positions.', + 'Use *tail* to place (x,y) at the base, *tip* to place (x,y) at the head,', + 'or *cm*/*center*/*middle* to center the arrow on (x,y).' + ].join(' ') }, arrow_scale: { valType: 'number', diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index 2584e758286..4ba6a36b59f 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -36,8 +36,12 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // Set basic properties traceOut.type = 'quiver'; + // Sizing API similar to cone + var sizemode = coerce('sizemode'); + coerce('sizeref', sizemode === 'raw' ? 1 : 0.5); + coerce('anchor'); + // Set default values using coerce - coerce('scale', 0.1); coerce('arrow_scale', 0.3); coerce('angle', Math.PI / 9); coerce('scaleratio'); diff --git a/src/traces/quiver/plot.js b/src/traces/quiver/plot.js index c1f67b156df..cd660cfa909 100644 --- a/src/traces/quiver/plot.js +++ b/src/traces/quiver/plot.js @@ -81,6 +81,20 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition lineSegments.exit().remove(); + // Precompute norms for sizing + var uArr = trace.u || []; + var vArr = trace.v || []; + var maxNorm = 0; + for (var ni = 0; ni < trace._length; ni++) { + var uu = uArr[ni] || 0; + var vv = vArr[ni] || 0; + var nrm = Math.sqrt(uu * uu + vv * vv); + if (nrm > maxNorm) maxNorm = nrm; + } + var sizemode = trace.sizemode || 'scaled'; + var sizeref = (trace.sizeref !== undefined) ? trace.sizeref : (sizemode === 'raw' ? 1 : 0.5); + var anchor = trace.anchor || 'tail'; + // Update line segments lineSegments.each(function(cdi) { var path = d3.select(this); @@ -92,7 +106,6 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition } // Compute arrow in data space - var scale = trace.scale || 1; var scaleRatio = trace.scaleratio || 1; var arrowScale = trace.arrow_scale || 0.2; var angle = trace.angle || Math.PI / 12; // small default @@ -100,8 +113,21 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition var u = (trace.u && trace.u[cdi.i]) || 0; var v = (trace.v && trace.v[cdi.i]) || 0; - var dx = u * scale * scaleRatio; - var dy = v * scale; + var norm = Math.sqrt(u * u + v * v); + var unitx = norm ? (u / norm) : 0; + var unity = norm ? (v / norm) : 0; + var baseLen; + if (sizemode === 'scaled') { + var n = maxNorm ? (norm / maxNorm) : 0; + baseLen = n * sizeref; + } else { + baseLen = norm * sizeref; + } + + var dxBase = unitx * baseLen; + var dyBase = unity * baseLen; + var dx = dxBase * scaleRatio; + var dy = dyBase; var barbLen = Math.sqrt((dx * dx) / scaleRatio + dy * dy); var arrowLen = barbLen * arrowScale; var barbAng = Math.atan2(dy, dx / scaleRatio); @@ -109,10 +135,23 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition var ang1 = barbAng + angle; var ang2 = barbAng - angle; - var x0 = cdi.x; - var y0 = cdi.y; - var x1 = x0 + dx; - var y1 = y0 + dy; + var x0, y0, x1, y1; + if (anchor === 'tip') { + x1 = cdi.x; + y1 = cdi.y; + x0 = x1 - dx; + y0 = y1 - dy; + } else if (anchor === 'cm' || anchor === 'center' || anchor === 'middle') { + x0 = cdi.x - dx / 2; + y0 = cdi.y - dy / 2; + x1 = cdi.x + dx / 2; + y1 = cdi.y + dy / 2; + } else { // tail + x0 = cdi.x; + y0 = cdi.y; + x1 = x0 + dx; + y1 = y0 + dy; + } var xh1 = x1 - arrowLen * Math.cos(ang1) * scaleRatio; var yh1 = y1 - arrowLen * Math.sin(ang1); diff --git a/test/plot-schema.json b/test/plot-schema.json index c07c61790ab..02ccb21d8c2 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -22048,14 +22048,36 @@ "min": 0, "valType": "number" }, - "scale": { - "description": "Scales size of the arrows (ideally to avoid overlap). Default = 0.1", - "dflt": 0.1, + "sizemode": { + "description": "Determines whether `sizeref` is set as a *scaled* (unitless) scalar (normalized by the max u/v norm in the vector field), as an *absolute* value (in the same units as the vector field), or *raw* to use the raw vector lengths.", + "dflt": "scaled", + "editType": "calc", + "valType": "enumerated", + "values": [ + "scaled", + "absolute", + "raw" + ] + }, + "sizeref": { + "description": "Adjusts the arrow size scaling. The arrow length is determined by the vector norm multiplied by `sizeref`, optionally normalized when `sizemode` is *scaled*.", "editType": "calc", - "max": 1, "min": 0, "valType": "number" }, + "anchor": { + "description": "Sets the arrows' anchor with respect to their (x,y) positions. Use *tail* to place (x,y) at the base, *tip* to place (x,y) at the head, or *cm*/*center*/*middle* to center the arrow on (x,y).", + "dflt": "tail", + "editType": "calc", + "valType": "enumerated", + "values": [ + "tip", + "tail", + "cm", + "center", + "middle" + ] + }, "scaleratio": { "description": "The ratio between the scale of the y-axis and the scale of the x-axis (scale_y / scale_x). Default = null, the scale ratio is not fixed.", "editType": "calc", From f7dddbc61a0798987f791c05a0028af286bb5f00 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 12:07:16 -0800 Subject: [PATCH 05/14] Match arrowhead attributes for annotations --- src/traces/quiver/attributes.js | 36 +- src/traces/quiver/defaults.js | 6 +- src/traces/quiver/plot.js | 5 +- test/plot-schema.json | 15494 ++++++++++++++++++------------ 4 files changed, 9474 insertions(+), 6067 deletions(-) diff --git a/src/traces/quiver/attributes.js b/src/traces/quiver/attributes.js index f7f3ffc2f74..a0e64eb74a9 100644 --- a/src/traces/quiver/attributes.js +++ b/src/traces/quiver/attributes.js @@ -65,14 +65,6 @@ var attrs = { 'or *cm*/*center*/*middle* to center the arrow on (x,y).' ].join(' ') }, - arrow_scale: { - valType: 'number', - dflt: 0.3, - min: 0, - max: 1, - editType: 'calc', - description: 'Value multiplied to length of barb to get length of arrowhead. Default = 0.3' - }, angle: { valType: 'number', dflt: Math.PI / 9, @@ -95,6 +87,26 @@ var attrs = { description: 'Maximum distance (in pixels) to look for nearby arrows on hover.' }, + // Arrowhead sizing, consistent with annotations API naming + arrowsize: { + valType: 'number', + min: 0.3, + dflt: 1, + editType: 'calc', + description: [ + 'Scales the size of the arrow head relative to a base size.', + 'Higher values produce larger heads.' + ].join(' ') + }, + // Back-compat alias + arrow_scale: { + valType: 'number', + min: 0, + max: 1, + editType: 'calc', + description: 'Deprecated alias for `arrowsize`-based sizing. Prefer using `arrowsize`.' + }, + // Line styling for arrows line: { color: { @@ -135,6 +147,14 @@ var attrs = { editType: 'style' }, + // Alias consistent with annotations; maps to line.width + arrowwidth: { + valType: 'number', + min: 0.1, + editType: 'style', + description: 'Sets the width (in px) of the arrow line (alias of `line.width`).' + }, + // Text and labels text: { valType: 'data_array', diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index 4ba6a36b59f..2d8e81554c1 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -42,7 +42,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('anchor'); // Set default values using coerce - coerce('arrow_scale', 0.3); + coerce('arrowsize', 1); + // back-compat + coerce('arrow_scale'); coerce('angle', Math.PI / 9); coerce('scaleratio'); coerce('hoverdistance', 20); @@ -50,7 +52,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // Line styling traceOut.line = { color: traceIn.line && traceIn.line.color ? traceIn.line.color : defaultColor, - width: traceIn.line && traceIn.line.width ? traceIn.line.width : 1, + width: (traceIn.arrowwidth !== undefined) ? traceIn.arrowwidth : (traceIn.line && traceIn.line.width ? traceIn.line.width : 1), dash: traceIn.line && traceIn.line.dash ? traceIn.line.dash : 'solid', shape: traceIn.line && traceIn.line.shape ? traceIn.line.shape : 'linear', smoothing: traceIn.line && traceIn.line.smoothing ? traceIn.line.smoothing : 1, diff --git a/src/traces/quiver/plot.js b/src/traces/quiver/plot.js index cd660cfa909..c6fbe470371 100644 --- a/src/traces/quiver/plot.js +++ b/src/traces/quiver/plot.js @@ -107,7 +107,10 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition // Compute arrow in data space var scaleRatio = trace.scaleratio || 1; - var arrowScale = trace.arrow_scale || 0.2; + var baseHeadScale = 0.2; + var arrowScale = (trace.arrowsize !== undefined) + ? (baseHeadScale * trace.arrowsize) + : (trace.arrow_scale !== undefined ? trace.arrow_scale : baseHeadScale); var angle = trace.angle || Math.PI / 12; // small default var u = (trace.u && trace.u[cdi.i]) || 0; diff --git a/test/plot-schema.json b/test/plot-schema.json index 02ccb21d8c2..26dbca17e17 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -14117,4847 +14117,6941 @@ "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.", "dflt": "normal", "editType": "plot", +<<<<<<< HEAD "valType": "enumerated", "values": [ "normal", "tozero", "nonnegative" - ] - }, - "rangeselector": { - "activecolor": { - "description": "Sets the background color of the active range selector button.", - "editType": "plot", - "valType": "color" - }, - "bgcolor": { - "description": "Sets the background color of the range selector buttons.", - "dflt": "#eee", - "editType": "plot", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the color of the border enclosing the range selector.", - "dflt": "#444", - "editType": "plot", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) of the border enclosing the range selector.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "buttons": { - "items": { - "button": { - "count": { - "description": "Sets the number of steps to take to update the range. Use with `step` to specify the update interval.", - "dflt": 1, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "description": "Sets the specifications for each buttons. By default, a range selector comes with no buttons.", - "editType": "plot", - "label": { - "description": "Sets the text label to appear on the button.", - "editType": "plot", - "valType": "string" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "step": { - "description": "The unit of measurement that the `count` value will set the range by.", - "dflt": "month", - "editType": "plot", - "valType": "enumerated", - "values": [ - "month", - "year", - "day", - "hour", - "minute", - "second", - "all" - ] - }, - "stepmode": { - "description": "Sets the range update mode. If *backward*, the range update shifts the start of range back *count* times *step* milliseconds. If *todate*, the range update shifts the start of range back to the first timestamp from *count* times *step* milliseconds back. For example, with `step` set to *year* and `count` set to *1* the range update shifts the start of the range back to January 01 of the current year. Month and year *todate* are currently available only for the built-in (Gregorian) calendar.", - "dflt": "backward", - "editType": "plot", - "valType": "enumerated", - "values": [ - "backward", - "todate" - ] - }, - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "visible": { - "description": "Determines whether or not this button is visible.", - "dflt": true, - "editType": "plot", - "valType": "boolean" - } - } - }, - "role": "object" - }, +======= + "valType": "any" + }, + { "editType": "plot", - "font": { - "color": { - "editType": "plot", - "valType": "color" - }, - "description": "Sets the font of the range selector button text.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "visible": { - "description": "Determines whether or not this range selector is visible. Note that range selectors are only available for x axes of `type` set to or auto-typed to *date*.", - "editType": "plot", - "valType": "boolean" - }, - "x": { - "description": "Sets the x position (in normalized coordinates) of the range selector.", - "editType": "plot", - "max": 3, - "min": -2, - "valType": "number" - }, - "xanchor": { - "description": "Sets the range selector's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the range selector.", - "dflt": "left", - "editType": "plot", - "valType": "enumerated", - "values": [ - "auto", - "left", - "center", - "right" - ] - }, - "y": { - "description": "Sets the y position (in normalized coordinates) of the range selector.", - "editType": "plot", - "max": 3, - "min": -2, - "valType": "number" - }, - "yanchor": { - "description": "Sets the range selector's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the range selector.", - "dflt": "bottom", - "editType": "plot", - "valType": "enumerated", - "values": [ - "auto", - "top", - "middle", - "bottom" - ] - } - }, - "rangeslider": { - "autorange": { - "description": "Determines whether or not the range slider range is computed in relation to the input data. If `range` is provided, then `autorange` is set to *false*.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "bgcolor": { - "description": "Sets the background color of the range slider.", - "dflt": "#fff", - "editType": "plot", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the border color of the range slider.", - "dflt": "#444", - "editType": "plot", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the border width of the range slider.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "integer" - }, - "editType": "calc", - "range": { - "description": "Sets the range of the range slider. If not set, defaults to the full xaxis range. If the axis `type` is *log*, then you must take the log of your desired range. If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "autorange": false - }, - "items": [ - { - "editType": "calc", - "impliedEdits": { - "^autorange": false - }, - "valType": "any" - }, - { - "editType": "calc", - "impliedEdits": { - "^autorange": false - }, - "valType": "any" - } - ], - "valType": "info_array" - }, - "role": "object", - "thickness": { - "description": "The height of the range slider as a fraction of the total plot area height.", - "dflt": 0.15, - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - }, - "visible": { - "description": "Determines whether or not the range slider will be visible. If visible, perpendicular axes will be set to `fixedrange`", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "yaxis": { - "_isSubplotObj": true, - "editType": "calc", - "range": { - "description": "Sets the range of this axis for the rangeslider.", - "editType": "plot", - "items": [ - { - "editType": "plot", - "valType": "any" - }, - { - "editType": "plot", - "valType": "any" - } - ], - "valType": "info_array" - }, - "rangemode": { - "description": "Determines whether or not the range of this axis in the rangeslider use the same value than in the main plot when zooming in/out. If *auto*, the autorange will be used. If *fixed*, the `range` is used. If *match*, the current range of the corresponding y-axis on the main subplot is used.", - "dflt": "match", - "editType": "calc", - "valType": "enumerated", - "values": [ - "auto", - "fixed", - "match" - ] - }, - "role": "object" - } - }, - "role": "object", - "scaleanchor": { - "description": "If set to another axis id (e.g. `x2`, `y`), the range of this axis changes together with the range of the corresponding axis such that the scale of pixels per unit is in a constant ratio. Both axes are still zoomable, but when you zoom one, the other will zoom the same amount, keeping a fixed midpoint. `constrain` and `constraintoward` determine how we enforce the constraint. You can chain these, ie `yaxis: {scaleanchor: *x*}, xaxis2: {scaleanchor: *y*}` but you can only link axes of the same `type`. The linked axis can have the opposite letter (to constrain the aspect ratio) or the same letter (to match scales across subplots). Loops (`yaxis: {scaleanchor: *x*}, xaxis: {scaleanchor: *y*}` or longer) are redundant and the last constraint encountered will be ignored to avoid possible inconsistent constraints via `scaleratio`. Note that setting axes simultaneously in both a `scaleanchor` and a `matches` constraint is currently forbidden. Setting `false` allows to remove a default constraint (occasionally, you may need to prevent a default `scaleanchor` constraint from being applied, eg. when having an image trace `yaxis: {scaleanchor: \"x\"}` is set automatically in order for pixels to be rendered as squares, setting `yaxis: {scaleanchor: false}` allows to remove the constraint).", - "editType": "plot", - "valType": "enumerated", - "values": [ - "/^x([2-9]|[1-9][0-9]+)?( domain)?$/", - "/^y([2-9]|[1-9][0-9]+)?( domain)?$/", - false - ] - }, - "scaleratio": { - "description": "If this axis is linked to another by `scaleanchor`, this determines the pixel to unit scale ratio. For example, if this value is 10, then every unit on this axis spans 10 times the number of pixels as a unit on the linked axis. Use this for example to create an elevation profile where the vertical scale is exaggerated a fixed amount with respect to the horizontal.", - "dflt": 1, + "valType": "any" + } + ], + "valType": "info_array" + }, + "description": "The dimensions (variables) of the parallel coordinates chart. 2..60 dimensions are supported.", + "editType": "calc", + "label": { + "description": "The shown name of the dimension.", + "editType": "plot", + "valType": "string" + }, + "multiselect": { + "description": "Do we allow multiple selection ranges or just a single range?", + "dflt": true, + "editType": "plot", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "none", + "valType": "string" + }, + "range": { + "description": "The domain range that represents the full, shown axis extent. Defaults to the `values` extent. Must be an array of `[fromValue, toValue]` with finite numbers as elements.", + "editType": "plot", + "items": [ + { "editType": "plot", - "min": 0, "valType": "number" - }, - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "ticks", - "valType": "boolean" - }, - "showdividers": { - "description": "Determines whether or not a dividers are drawn between the category levels of this axis. Only has an effect on *multicategory* axes.", - "dflt": true, - "editType": "ticks", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showgrid": { - "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.", - "editType": "ticks", - "valType": "boolean" - }, - "showline": { - "description": "Determines whether or not a line bounding this axis is drawn.", - "dflt": false, - "editType": "ticks+layoutstyle", - "valType": "boolean" - }, - "showspikes": { - "description": "Determines whether or not spikes (aka droplines) are drawn for this axis. Note: This only takes affect when hovermode = closest", - "dflt": false, - "editType": "modebar", - "valType": "boolean" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "ticks", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "side": { - "description": "Determines whether a x (y) axis is positioned at the *bottom* (*left*) or *top* (*right*) of the plotting area.", + }, + { "editType": "plot", - "valType": "enumerated", - "values": [ - "top", - "bottom", - "left", - "right" - ] - }, - "spikecolor": { - "description": "Sets the spike color. If undefined, will use the series color", - "dflt": null, - "editType": "none", - "valType": "color" - }, - "spikedash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "dash", - "editType": "none", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ] - }, - "spikemode": { - "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on", - "dflt": "toaxis", - "editType": "none", - "flags": [ - "toaxis", - "across", - "marker" - ], - "valType": "flaglist" - }, - "spikesnap": { - "description": "Determines whether spikelines are stuck to the cursor or to the closest datapoints.", - "dflt": "hovered data", - "editType": "none", - "valType": "enumerated", - "values": [ - "data", - "cursor", - "hovered data" - ] - }, - "spikethickness": { - "description": "Sets the width (in px) of the zero line.", - "dflt": 3, - "editType": "none", "valType": "number" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "ticks", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "ticks", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "ticks", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "ticks", - "valType": "color" - }, - "description": "Sets the tick font.", - "editType": "ticks", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "ticks", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "ticks", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "ticks", - "valType": "string" - }, - "size": { - "editType": "ticks", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "ticks", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "ticks", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "ticks", - "items": [ - { - "editType": "ticks", - "valType": "any" - }, - { - "editType": "ticks", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "ticks", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "ticks", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "ticks", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabelindex": { - "arrayOk": true, - "description": "Only for axes with `type` *date* or *linear*. Instead of drawing the major tick label, draw the label for the minor tick that is n positions away from the major tick. E.g. to always draw the label for the minor tick before each major tick, choose `ticklabelindex` -1. This is useful for date axes with `ticklabelmode` *period* if you want to label the period that ends with each major tick instead of the period that begins there.", - "editType": "calc", - "valType": "integer" - }, - "ticklabelindexsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticklabelindex`.", - "editType": "none", - "valType": "string" - }, - "ticklabelmode": { - "description": "Determines where tick labels are drawn with respect to their corresponding ticks and grid lines. Only has an effect for axes of `type` *date* When set to *period*, tick labels are drawn in the middle of the period between ticks.", - "dflt": "instant", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "instant", - "period" - ] - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. Otherwise on *category* and *multicategory* axes the default is *allow*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn with respect to the axis. Please note that top or bottom has no effect on x axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Similarly, left or right has no effect on y axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Has no effect on *multicategory* axes. When used on axes linked by `matches` or `scaleanchor`, no extra padding for inside labels would be added by autorange, so that the scales could match.", - "dflt": "outside", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelshift": { - "description": "Shifts the tick labels by the specified number of pixels in parallel to the axis. Positive values move the labels in the positive direction of the axis.", - "dflt": 0, - "editType": "ticks", - "valType": "integer" - }, - "ticklabelstandoff": { - "description": "Sets the standoff distance (in px) between the axis tick labels and their default position. A positive `ticklabelstandoff` moves the labels farther away from the plot area if `ticklabelposition` is *outside*, and deeper into the plot area if `ticklabelposition` is *inside*. A negative `ticklabelstandoff` works in the opposite direction, moving outside ticks towards the plot area and inside ticks towards the outside. If the negative value is large enough, inside ticks can even end up outside and vice versa.", - "dflt": 0, - "editType": "ticks", - "valType": "integer" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "ticks", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "ticks", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided). If *sync*, the number of ticks will sync with the overlayed axis set by `overlaying` property.", - "editType": "ticks", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array", - "sync" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "ticks", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "tickson": { - "description": "Determines where ticks and grid lines are drawn with respect to their corresponding tick labels. Only has an effect for axes of `type` *category* or *multicategory*. When set to *boundaries*, ticks and grid lines are drawn half a category to the left/bottom of labels.", - "dflt": "labels", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "labels", - "boundaries" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "ticks", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "ticks", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "ticks", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "ticks", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "ticks", - "font": { - "color": { - "editType": "ticks", - "valType": "color" - }, - "description": "Sets this axis' title font.", - "editType": "ticks", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "ticks", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "ticks", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "ticks", - "valType": "string" - }, - "size": { - "editType": "ticks", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "ticks", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "standoff": { - "description": "Sets the standoff distance (in px) between the axis labels and the title text The default value is a function of the axis tick labels, the title `font.size` and the axis `linewidth`. Note that the axis title position is always constrained within the margins, so the actual standoff distance is always less than the set or default value. By setting `standoff` and turning on `automargin`, plotly.js will push the margins to fit the axis title at given standoff distance.", - "editType": "ticks", - "min": 0, - "valType": "number" - }, - "text": { - "description": "Sets the title of this axis.", - "editType": "ticks", - "valType": "string" - } - }, -<<<<<<< HEAD -======= - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", - "dflt": "circle", - "editType": "calc", - "valType": "string" - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", - "dflt": "markers", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "selected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "role": "object" - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", - "dflt": "map", - "editType": "calc", - "valType": "subplotid" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets the icon text font (color=map.layer.paint.text-color, size=map.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "dflt": "Open Sans Regular, Arial Unicode MS Regular", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "role": "object", - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "textposition": { - "arrayOk": false, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "type": "scattermap", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "role": "object" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "map", - "gl", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The data visualized as scatter point, lines or marker symbols on a MapLibre GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", - "hrName": "scatter_map" - }, - "type": "scattermap" - }, - "scattermapbox": { - "animatable": false, - "attributes": { - "below": { - "description": "Determines if this scattermapbox trace's layers are to be inserted before the layer with the specified ID. By default, scattermapbox layers are inserted above all the base layers. To place the scattermapbox layers above every other layer, set `below` to *''*.", - "editType": "calc", - "valType": "string" - }, - "cluster": { - "color": { - "arrayOk": true, - "description": "Sets the color for each cluster step.", - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether clustering is enabled or disabled.", - "editType": "calc", - "valType": "boolean" - }, - "maxzoom": { - "description": "Sets the maximum zoom level. At zoom levels equal to or greater than this, points will never be clustered.", - "dflt": 24, - "editType": "calc", - "max": 24, - "min": 0, - "valType": "number" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "size": { - "arrayOk": true, - "description": "Sets the size for each cluster step.", - "dflt": 20, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "step": { - "arrayOk": true, - "description": "Sets how many points it takes to create a cluster or advance to the next cluster step. Use this in conjunction with arrays for `size` and / or `color`. If an integer, steps start at multiples of this number. If an array, each step extends from the given value until one less than the next value.", - "dflt": -1, - "editType": "calc", - "min": -1, - "valType": "number" - }, - "stepsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `step`.", - "editType": "none", - "valType": "string" - } - }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "fill": { - "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.", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "toself" - ] - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "calc", - "valType": "color" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "calc", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "lon", - "lat", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "lat": { - "description": "Sets the latitude coordinates (in degrees North).", - "editType": "calc", - "valType": "data_array" - }, - "latsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lat`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "color": { - "description": "Sets the line color.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "lon": { - "description": "Sets the longitude coordinates (in degrees East).", - "editType": "calc", - "valType": "data_array" - }, - "lonsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lon`.", - "editType": "none", - "valType": "string" - }, - "marker": { - "allowoverlap": { - "description": "Flag to draw all symbols, even if they overlap.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "angle": { - "arrayOk": true, - "description": "Sets the marker orientation from true North, in degrees clockwise. When using the *auto* default, no rotation would be applied in perspective views which is different from using a zero angle.", - "dflt": "auto", - "editType": "calc", - "valType": "number" - }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "calc", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "calc", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "calc", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "calc", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "calc", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "calc", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", - "items": [ - { - "editType": "calc", - "valType": "any" - }, - { - "editType": "calc", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "calc", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "calc", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "calc", - "font": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", - "dflt": "circle", - "editType": "calc", - "valType": "string" - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", - "dflt": "markers", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "selected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "role": "object" - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "mapbox subplots and traces are deprecated! Please consider switching to `map` subplots and traces. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ Sets a reference between this trace's data coordinates and a mapbox subplot. If *mapbox* (the default value), the data refer to `layout.mapbox`. If *mapbox2*, the data refer to `layout.mapbox2`, and so on.", - "dflt": "mapbox", - "editType": "calc", - "valType": "subplotid" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets the icon text font (color=mapbox.layer.paint.text-color, size=mapbox.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "dflt": "Open Sans Regular, Arial Unicode MS Regular", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "role": "object", - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "textposition": { - "arrayOk": false, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "type": "scattermapbox", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "role": "object" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "mapbox", - "gl", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "*scattermapbox* trace is deprecated! Please consider switching to the *scattermap* trace type and `map` subplots. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ The data visualized as scatter point, lines or marker symbols on a Mapbox GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", - "hrName": "scatter_mapbox" - }, - "type": "scattermapbox" - }, - "scatterpolar": { - "animatable": false, - "attributes": { - "cliponaxis": { - "description": "Determines whether or not markers and text nodes are clipped about the subplot axes. To show markers and text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "dr": { - "description": "Sets the r coordinate step.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "dtheta": { - "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates.", - "editType": "calc", - "valType": "number" - }, - "fill": { - "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. scatterpolar has a subset of the options available to scatter. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other.", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "toself", - "tonext" - ] - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "style", - "valType": "color" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "r", - "theta", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "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*.", - "editType": "style", - "flags": [ - "points", - "fills" - ], - "valType": "flaglist" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "backoff": { - "arrayOk": true, - "description": "Sets the line back off from the end point of the nth line segment (in px). This option is useful e.g. to avoid overlap with arrowhead markers. With *auto* the lines would trim before markers if `marker.angleref` is set to *previous*.", - "dflt": "auto", - "editType": "plot", - "min": 0, - "valType": "number" - }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the line color.", - "editType": "style", - "valType": "color" - }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ] - }, - "editType": "calc", - "role": "object", - "shape": { - "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes.", - "dflt": "linear", - "editType": "plot", - "valType": "enumerated", - "values": [ - "linear", - "spline" - ] - }, - "smoothing": { - "description": "Has an effect only if `shape` is set to *spline* Sets the amount of smoothing. *0* corresponds to no smoothing (equivalent to a *linear* shape).", - "dflt": 1, - "editType": "plot", - "max": 1.3, - "min": 0, - "valType": "number" - }, - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "marker": { - "angle": { - "arrayOk": true, - "description": "Sets the marker angle in respect to `angleref`.", - "dflt": 0, - "editType": "plot", - "valType": "angle" - }, - "angleref": { - "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen.", - "dflt": "up", - "editType": "plot", - "valType": "enumerated", - "values": [ - "previous", - "up" - ] - }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "style", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "gradient": { - "color": { - "arrayOk": true, - "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "role": "object", - "type": { - "arrayOk": true, - "description": "Sets the type of gradient used to fill the markers", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "radial", - "horizontal", - "vertical", - "none" - ] - }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - } - }, - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "style", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - } - }, - "maxdisplayed": { - "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "standoff": { - "arrayOk": true, - "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", - "dflt": "circle", - "editType": "style", - "valType": "enumerated", - "values": [ - 0, - "0", - "circle", - 100, - "100", - "circle-open", - 200, - "200", - "circle-dot", - 300, - "300", - "circle-open-dot", - 1, - "1", - "square", - 101, - "101", - "square-open", - 201, - "201", - "square-dot", - 301, - "301", - "square-open-dot", - 2, - "2", - "diamond", - 102, - "102", - "diamond-open", - 202, - "202", - "diamond-dot", - 302, - "302", - "diamond-open-dot", - 3, - "3", - "cross", - 103, - "103", - "cross-open", - 203, - "203", - "cross-dot", - 303, - "303", - "cross-open-dot", - 4, - "4", - "x", - 104, - "104", - "x-open", - 204, - "204", - "x-dot", - 304, - "304", - "x-open-dot", - 5, - "5", - "triangle-up", - 105, - "105", - "triangle-up-open", - 205, - "205", - "triangle-up-dot", - 305, - "305", - "triangle-up-open-dot", - 6, - "6", - "triangle-down", - 106, - "106", - "triangle-down-open", - 206, - "206", - "triangle-down-dot", - 306, - "306", - "triangle-down-open-dot", - 7, - "7", - "triangle-left", - 107, - "107", - "triangle-left-open", - 207, - "207", - "triangle-left-dot", - 307, - "307", - "triangle-left-open-dot", - 8, - "8", - "triangle-right", - 108, - "108", - "triangle-right-open", - 208, - "208", - "triangle-right-dot", - 308, - "308", - "triangle-right-open-dot", - 9, - "9", - "triangle-ne", - 109, - "109", - "triangle-ne-open", - 209, - "209", - "triangle-ne-dot", - 309, - "309", - "triangle-ne-open-dot", - 10, - "10", - "triangle-se", - 110, - "110", - "triangle-se-open", - 210, - "210", - "triangle-se-dot", - 310, - "310", - "triangle-se-open-dot", - 11, - "11", - "triangle-sw", - 111, - "111", - "triangle-sw-open", - 211, - "211", - "triangle-sw-dot", - 311, - "311", - "triangle-sw-open-dot", - 12, - "12", - "triangle-nw", - 112, - "112", - "triangle-nw-open", - 212, - "212", - "triangle-nw-dot", - 312, - "312", - "triangle-nw-open-dot", - 13, - "13", - "pentagon", - 113, - "113", - "pentagon-open", - 213, - "213", - "pentagon-dot", - 313, - "313", - "pentagon-open-dot", - 14, - "14", - "hexagon", - 114, - "114", - "hexagon-open", - 214, - "214", - "hexagon-dot", - 314, - "314", - "hexagon-open-dot", - 15, - "15", - "hexagon2", - 115, - "115", - "hexagon2-open", - 215, - "215", - "hexagon2-dot", - 315, - "315", - "hexagon2-open-dot", - 16, - "16", - "octagon", - 116, - "116", - "octagon-open", - 216, - "216", - "octagon-dot", - 316, - "316", - "octagon-open-dot", - 17, - "17", - "star", - 117, - "117", - "star-open", - 217, - "217", - "star-dot", - 317, - "317", - "star-open-dot", - 18, - "18", - "hexagram", - 118, - "118", - "hexagram-open", - 218, - "218", - "hexagram-dot", - 318, - "318", - "hexagram-open-dot", - 19, - "19", - "star-triangle-up", - 119, - "119", - "star-triangle-up-open", - 219, - "219", - "star-triangle-up-dot", - 319, - "319", - "star-triangle-up-open-dot", - 20, - "20", - "star-triangle-down", - 120, - "120", - "star-triangle-down-open", - 220, - "220", - "star-triangle-down-dot", - 320, - "320", - "star-triangle-down-open-dot", - 21, - "21", - "star-square", - 121, - "121", - "star-square-open", - 221, - "221", - "star-square-dot", - 321, - "321", - "star-square-open-dot", - 22, - "22", - "star-diamond", - 122, - "122", - "star-diamond-open", - 222, - "222", - "star-diamond-dot", - 322, - "322", - "star-diamond-open-dot", - 23, - "23", - "diamond-tall", - 123, - "123", - "diamond-tall-open", - 223, - "223", - "diamond-tall-dot", - 323, - "323", - "diamond-tall-open-dot", - 24, - "24", - "diamond-wide", - 124, - "124", - "diamond-wide-open", - 224, - "224", - "diamond-wide-dot", - 324, - "324", - "diamond-wide-open-dot", - 25, - "25", - "hourglass", - 125, - "125", - "hourglass-open", - 26, - "26", - "bowtie", - 126, - "126", - "bowtie-open", - 27, - "27", - "circle-cross", - 127, - "127", - "circle-cross-open", - 28, - "28", - "circle-x", - 128, - "128", - "circle-x-open", - 29, - "29", - "square-cross", - 129, - "129", - "square-cross-open", - 30, - "30", - "square-x", - 130, - "130", - "square-x-open", - 31, - "31", - "diamond-cross", - 131, - "131", - "diamond-cross-open", - 32, - "32", - "diamond-x", - 132, - "132", - "diamond-x-open", - 33, - "33", - "cross-thin", - 133, - "133", - "cross-thin-open", - 34, - "34", - "x-thin", - 134, - "134", - "x-thin-open", - 35, - "35", - "asterisk", - 135, - "135", - "asterisk-open", - 36, - "36", - "hash", - 136, - "136", - "hash-open", - 236, - "236", - "hash-dot", - 336, - "336", - "hash-open-dot", - 37, - "37", - "y-up", - 137, - "137", - "y-up-open", - 38, - "38", - "y-down", - 138, - "138", - "y-down-open", - 39, - "39", - "y-left", - 139, - "139", - "y-left-open", - 40, - "40", - "y-right", - 140, - "140", - "y-right-open", - 41, - "41", - "line-ew", - 141, - "141", - "line-ew-open", - 42, - "42", - "line-ns", - 142, - "142", - "line-ns-open", - 43, - "43", - "line-ne", - 143, - "143", - "line-ne-open", - 44, - "44", - "line-nw", - 144, - "144", - "line-nw-open", - 45, - "45", - "arrow-up", - 145, - "145", - "arrow-up-open", - 46, - "46", - "arrow-down", - 146, - "146", - "arrow-down-open", - 47, - "47", - "arrow-left", - 147, - "147", - "arrow-left-open", - 48, - "48", - "arrow-right", - 148, - "148", - "arrow-right-open", - 49, - "49", - "arrow-bar-up", - 149, - "149", - "arrow-bar-up-open", - 50, - "50", - "arrow-bar-down", - 150, - "150", - "arrow-bar-down-open", - 51, - "51", - "arrow-bar-left", - 151, - "151", - "arrow-bar-left-open", - 52, - "52", - "arrow-bar-right", - 152, - "152", - "arrow-bar-right-open", - 53, - "53", - "arrow", - 153, - "153", - "arrow-open", - 54, - "54", - "arrow-wide", - 154, - "154", - "arrow-wide-open" + } + ], + "valType": "info_array" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "plot", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`.", + "editType": "plot", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear.", + "editType": "plot", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "values": { + "description": "Dimension values. `values[n]` represents the value of the `n`th point in the dataset, therefore the `values` vector for all dimensions must be the same (longer vectors will be truncated). Each value must be a finite number.", + "editType": "calc", + "valType": "data_array" + }, + "valuessrc": { + "description": "Sets the source reference on Chart Studio Cloud for `values`.", + "editType": "none", + "valType": "string" + }, + "visible": { + "description": "Shows the dimension when set to `true` (the default). Hides the dimension for `false`.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + } + } + }, + "role": "object" + }, + "domain": { + "column": { + "description": "If there is a layout grid, use the domain for this column in the grid for this parcoords trace .", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "integer" + }, + "editType": "plot", + "role": "object", + "row": { + "description": "If there is a layout grid, use the domain for this row in the grid for this parcoords trace .", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "integer" + }, + "x": { + "description": "Sets the horizontal domain of this parcoords trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "plot", + "items": [ + { + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array" + }, + "y": { + "description": "Sets the vertical domain of this parcoords trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "plot", + "items": [ + { + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array" + } + }, + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "labelangle": { + "description": "Sets the angle of the labels with respect to the horizontal. For example, a `tickangle` of -90 draws the labels vertically. Tilted labels with *labelangle* may be positioned better inside margins when `labelposition` is set to *bottom*.", + "dflt": 0, + "editType": "plot", + "valType": "angle" + }, + "labelfont": { + "color": { + "editType": "plot", + "valType": "color" + }, + "description": "Sets the font for the `dimension` labels.", + "editType": "plot", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string" + }, + "size": { + "editType": "plot", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "labelside": { + "description": "Specifies the location of the `label`. *top* positions labels above, next to the title *bottom* positions labels below the graph Tilted labels with *labelangle* may be positioned better inside margins when `labelposition` is set to *bottom*.", + "dflt": "top", + "editType": "plot", + "valType": "enumerated", + "values": [ + "top", + "bottom" + ] + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `line.colorscale`. Has an effect only if in `line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": false, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `line.color`) or the bounds set in `line.cmin` and `line.cmax` Has an effect only if in `line.color` is set to a numerical array. Defaults to `false` when `line.cmin` and `line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color` and if set, `line.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `line.cmin` and/or `line.cmax` to be equidistant to this point. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color`. Has no effect when `line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color` and if set, `line.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `line.cmin` and `line.cmax` if set.", + "editType": "calc", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `line.cmin` and `line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": [ + [ + 0, + "#440154" + ], + [ + 0.06274509803921569, + "#48186a" + ], + [ + 0.12549019607843137, + "#472d7b" + ], + [ + 0.18823529411764706, + "#424086" + ], + [ + 0.25098039215686274, + "#3b528b" + ], + [ + 0.3137254901960784, + "#33638d" + ], + [ + 0.3764705882352941, + "#2c728e" + ], + [ + 0.4392156862745098, + "#26828e" + ], + [ + 0.5019607843137255, + "#21918c" + ], + [ + 0.5647058823529412, + "#1fa088" + ], + [ + 0.6274509803921569, + "#28ae80" + ], + [ + 0.6901960784313725, + "#3fbc73" + ], + [ + 0.7529411764705882, + "#5ec962" + ], + [ + 0.8156862745098039, + "#84d44b" + ], + [ + 0.8784313725490196, + "#addc30" + ], + [ + 0.9411764705882353, + "#d8e219" + ], + [ + 1, + "#fde725" + ] + ], + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `line.color` is set to a numerical array. If true, `line.cmin` will correspond to the last color in the array and `line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `line.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "rangefont": { + "color": { + "editType": "plot", + "valType": "color" + }, + "description": "Sets the font for the `dimension` range values.", + "editType": "plot", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string" + }, + "size": { + "editType": "plot", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "tickfont": { + "color": { + "editType": "plot", + "valType": "color" + }, + "description": "Sets the font for the `dimension` tick values.", + "editType": "plot", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "auto", + "editType": "plot", + "valType": "string" + }, + "size": { + "editType": "plot", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "type": "parcoords", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "plot", + "line": { + "color": { + "description": "Sets the base color of unselected lines. in connection with `unselected.line.opacity`.", + "dflt": "#7f7f7f", + "editType": "plot", + "valType": "color" + }, + "editType": "plot", + "opacity": { + "description": "Sets the opacity of unselected lines. The default *auto* decreases the opacity smoothly as the number of lines increases. Use *1* to achieve exact `unselected.line.color`.", + "dflt": "auto", + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object" + }, + "role": "object" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "gl", + "regl", + "noOpacity", + "noHover" + ], + "meta": { + "description": "Parallel coordinates for multidimensional exploratory data analysis. The samples are specified in `dimensions`. The colors are set in `line.color`." + }, + "type": "parcoords" + }, + "pie": { + "animatable": false, + "attributes": { + "automargin": { + "description": "Determines whether outside text labels can push the margins.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "direction": { + "description": "Specifies the direction at which succeeding sectors follow one another.", + "dflt": "counterclockwise", + "editType": "calc", + "valType": "enumerated", + "values": [ + "clockwise", + "counterclockwise" + ] + }, + "dlabel": { + "description": "Sets the label step. See `label0` for more info.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "domain": { + "column": { + "description": "If there is a layout grid, use the domain for this column in the grid for this pie trace .", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "editType": "calc", + "role": "object", + "row": { + "description": "If there is a layout grid, use the domain for this row in the grid for this pie trace .", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "x": { + "description": "Sets the horizontal domain of this pie trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "calc", + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array" + }, + "y": { + "description": "Sets the vertical domain of this pie trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "calc", + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array" + } + }, + "hole": { + "description": "Sets the fraction of the radius to cut out of the pie. Use this to make a donut chart.", + "dflt": 0, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "label", + "text", + "value", + "percent", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `percent` and `text`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", + "valType": "any" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "hovertextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "insidetextfont": { + "color": { + "arrayOk": true, + "editType": "plot", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used for `textinfo` lying inside the sector.", + "editType": "plot", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "plot", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "insidetextorientation": { + "description": "Controls the orientation of the text inside chart sectors. When set to *auto*, text may be oriented in any direction in order to be as big as possible in the middle of a sector. The *horizontal* option orients text to be parallel with the bottom of the chart, and may make text smaller in order to achieve that goal. The *radial* option orients text along the radius of the sector. The *tangential* option orients text perpendicular to the radius of the sector.", + "dflt": "auto", + "editType": "plot", + "valType": "enumerated", + "values": [ + "horizontal", + "radial", + "tangential", + "auto" + ] + }, + "label0": { + "description": "Alternate to `labels`. Builds a numeric set of labels. Use with `dlabel` where `label0` is the starting label and `dlabel` the step.", + "dflt": 0, + "editType": "calc", + "valType": "number" + }, + "labels": { + "description": "Sets the sector labels. If `labels` entries are duplicated, we sum associated `values` or simply count occurrences if `values` is not provided. For other array attributes (including color) we use the first non-empty entry among all occurrences of the label.", + "editType": "calc", + "valType": "data_array" + }, + "labelssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `labels`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "marker": { + "colors": { + "description": "Sets the color of each sector. If not specified, the default trace color set is used to pick the sector colors.", + "editType": "calc", + "valType": "data_array" + }, + "colorssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `colors`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "line": { + "color": { + "arrayOk": true, + "description": "Sets the color of the line enclosing each sector.", + "dflt": "#444", + "editType": "style", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "role": "object", + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the line enclosing each sector.", + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "number" + }, + "widthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `width`.", + "editType": "none", + "valType": "string" + } + }, + "pattern": { + "bgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of background pattern fill. Defaults to a `marker.color` background when `fillmode` is *overlay*. Otherwise, defaults to a transparent background.", + "editType": "style", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the pattern within the marker.", + "editType": "style", + "fgcolor": { + "arrayOk": true, + "description": "When there is no colorscale sets the color of foreground pattern fill. Defaults to a `marker.color` background when `fillmode` is *replace*. Otherwise, defaults to dark grey or white to increase contrast with the `bgcolor`.", + "editType": "style", + "valType": "color" + }, + "fgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", + "editType": "none", + "valType": "string" + }, + "fgopacity": { + "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "fillmode": { + "description": "Determines whether `marker.color` should be used as a default to `bgcolor` or a `fgcolor`.", + "dflt": "replace", + "editType": "style", + "valType": "enumerated", + "values": [ + "replace", + "overlay" + ] + }, + "path": { + "arrayOk": true, + "description": "Sets a custom path for pattern fill. Use with no `shape` or `solidity`, provide an SVG path string for the regions of the square from (0,0) to (`size`,`size`) to color.", + "editType": "style", + "valType": "string" + }, + "pathsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `path`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shape": { + "arrayOk": true, + "description": "Sets the shape of the pattern fill. By default, no pattern is used for filling the area.", + "dflt": "", + "editType": "style", + "valType": "enumerated", + "values": [ + "", + "/", + "\\", + "x", + "-", + "|", + "+", + "." + ] + }, + "shapesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shape`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", + "dflt": 8, + "editType": "style", + "min": 0, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "solidity": { + "arrayOk": true, + "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", + "dflt": 0.3, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "soliditysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", + "editType": "none", + "valType": "string" + } + }, + "role": "object" + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "outsidetextfont": { + "color": { + "arrayOk": true, + "editType": "plot", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used for `textinfo` lying outside the sector.", + "editType": "plot", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "plot", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "pull": { + "arrayOk": true, + "description": "Sets the fraction of larger radius to pull the sectors out from the center. This can be a constant to pull all slices apart from each other equally or an array to highlight one or more slices.", + "dflt": 0, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "pullsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `pull`.", + "editType": "none", + "valType": "string" + }, + "rotation": { + "description": "Instead of the first slice starting at 12 o'clock, rotate to some other angle.", + "dflt": 0, + "editType": "calc", + "valType": "angle" + }, + "scalegroup": { + "description": "If there are multiple pie charts that should be sized according to their totals, link them by providing a non-empty group id here shared by every trace in the same group.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "sort": { + "description": "Determines whether or not the sectors are reordered from largest to smallest.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "text": { + "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "editType": "plot", + "valType": "data_array" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "plot", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used for `textinfo`.", + "editType": "plot", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "plot", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textinfo": { + "description": "Determines which trace information appear on the graph.", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "label", + "text", + "value", + "percent" + ], + "valType": "flaglist" + }, + "textposition": { + "arrayOk": true, + "description": "Specifies the location of the `textinfo`.", + "dflt": "auto", + "editType": "plot", + "valType": "enumerated", + "values": [ + "inside", + "outside", + "auto", + "none" + ] + }, + "textpositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", + "editType": "none", + "valType": "string" + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `percent` and `text`.", + "dflt": "", + "editType": "plot", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "title": { + "editType": "plot", + "font": { + "color": { + "arrayOk": true, + "editType": "plot", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used for `title`.", + "editType": "plot", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "plot", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "position": { + "description": "Specifies the location of the `title`.", + "editType": "plot", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle center", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "role": "object", + "text": { + "description": "Sets the title of the chart. If it is empty, no title is displayed.", + "dflt": "", + "editType": "plot", + "valType": "string" + } + }, + "type": "pie", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "values": { + "description": "Sets the values of the sectors. If omitted, we count occurrences of each label.", + "editType": "calc", + "valType": "data_array" + }, + "valuessrc": { + "description": "Sets the source reference on Chart Studio Cloud for `values`.", + "editType": "none", + "valType": "string" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "pie-like", + "pie", + "showLegend" + ], + "layoutAttributes": { + "extendpiecolors": { + "description": "If `true`, the pie slice colors (whether given by `piecolorway` or inherited from `colorway`) will be extended to three times its original length by first repeating every color 20% lighter then each color 20% darker. This is intended to reduce the likelihood of reusing the same color when you have many slices, but you can set `false` to disable. Colors provided in the trace, using `marker.colors`, are never extended.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "hiddenlabels": { + "description": "hiddenlabels is the funnelarea & pie chart analog of visible:'legendonly' but it can contain many labels, and can simultaneously hide slices from several pies/funnelarea charts", + "editType": "calc", + "valType": "data_array" + }, + "hiddenlabelssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hiddenlabels`.", + "editType": "none", + "valType": "string" + }, + "piecolorway": { + "description": "Sets the default pie slice colors. Defaults to the main `colorway` used for trace colors. If you specify a new list here it can still be extended with lighter and darker colors, see `extendpiecolors`.", + "editType": "calc", + "valType": "colorlist" + } + }, + "meta": { + "description": "A data visualized by the sectors of the pie is set in `values`. The sector labels are set in `labels`. The sector colors are set in `marker.colors`" + }, + "type": "pie" + }, + "quiver": { + "animatable": true, + "attributes": { + "anchor": { + "description": "Sets the arrows' anchor with respect to their (x,y) positions. Use *tail* to place (x,y) at the base, *tip* to place (x,y) at the head, or *cm*/*center*/*middle* to center the arrow on (x,y).", + "dflt": "tail", + "editType": "calc", + "valType": "enumerated", + "values": [ + "tip", + "tail", + "cm", + "center", + "middle" + ] + }, + "angle": { + "description": "Angle of arrowhead in radians. Default = π/9", + "dflt": 0.3490658503988659, + "editType": "calc", + "max": 1.5707963267948966, + "min": 0, + "valType": "number" + }, + "arrow_scale": { + "description": "Deprecated alias for `arrowsize`-based sizing. Prefer using `arrowsize`.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "arrowsize": { + "description": "Scales the size of the arrow head relative to a base size. Higher values produce larger heads.", + "dflt": 1, + "editType": "calc", + "min": 0.3, + "valType": "number" + }, + "arrowwidth": { + "description": "Sets the width (in px) of the arrow line (alias of `line.width`).", + "editType": "style", + "min": 0.1, + "valType": "number" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "hoverdistance": { + "description": "Maximum distance (in pixels) to look for nearby arrows on hover.", + "dflt": 20, + "editType": "calc", + "min": -1, + "valType": "number" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "u", + "v", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `u`, `v`, `text` and `name`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "ids": { + "anim": true, + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "color": { + "description": "Sets the color of the arrow lines.", + "dflt": "#000", + "editType": "style", + "valType": "color" + }, + "dash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "solid", + "editType": "style", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, + "editType": "style", + "role": "object", + "shape": { + "description": "Determines the line shape.", + "dflt": "linear", + "editType": "plot", + "valType": "enumerated", + "values": [ + "linear", + "spline", + "hv", + "vh", + "hvh", + "vhv" + ] + }, + "simplify": { + "description": "Simplifies lines by removing nearly-overlapping points.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + }, + "smoothing": { + "description": "Has an effect only if `shape` is set to *spline*. Sets the amount of smoothing.", + "dflt": 1, + "editType": "plot", + "max": 1.3, + "min": 0, + "valType": "number" + }, + "width": { + "description": "Sets the width (in px) of the arrow lines.", + "dflt": 1, + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "scaleratio": { + "description": "The ratio between the scale of the y-axis and the scale of the x-axis (scale_y / scale_x). Default = null, the scale ratio is not fixed.", + "editType": "calc", + "min": 0, + "valType": "number" + }, + "selected": { + "editType": "style", + "line": { + "color": { + "description": "Sets the line color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width of selected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "sizemode": { + "description": "Determines whether `sizeref` is set as a *scaled* (unitless) scalar (normalized by the max u/v norm in the vector field), as an *absolute* value (in the same units as the vector field), or *raw* to use the raw vector lengths.", + "dflt": "scaled", + "editType": "calc", + "valType": "enumerated", + "values": [ + "scaled", + "absolute", + "raw" + ] + }, + "sizeref": { + "description": "Adjusts the arrow size scaling. The arrow length is determined by the vector norm multiplied by `sizeref`, optionally normalized when `sizemode` is *scaled*.", + "editType": "calc", + "min": 0, + "valType": "number" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "text": { + "anim": true, + "description": "Sets text elements associated with each (x,y) pair.", + "editType": "calc", + "valType": "data_array" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textposition": { + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "type": "quiver", + "u": { + "anim": true, + "description": "Sets the x components of the arrow vectors.", + "editType": "calc", + "valType": "data_array" + }, + "uid": { + "anim": true, + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "style", + "line": { + "color": { + "description": "Sets the line color of unselected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object", + "width": { + "description": "Sets the line width of unselected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "usrc": { + "description": "Sets the source reference on Chart Studio Cloud for `u`.", + "editType": "none", + "valType": "string" + }, + "v": { + "anim": true, + "description": "Sets the y components of the arrow vectors.", + "editType": "calc", + "valType": "data_array" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + }, + "vsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `v`.", + "editType": "none", + "valType": "string" + }, + "x": { + "anim": true, + "description": "Sets the x coordinates of the arrow locations.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "xaxis": { + "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", + "dflt": "x", + "editType": "calc+clearAxisTypes", + "valType": "subplotid" + }, + "xsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `x`.", + "editType": "none", + "valType": "string" + }, + "y": { + "anim": true, + "description": "Sets the y coordinates of the arrow locations.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "yaxis": { + "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", + "dflt": "y", + "editType": "calc+clearAxisTypes", + "valType": "subplotid" + }, + "ysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `y`.", + "editType": "none", + "valType": "string" + } + }, + "categories": [ + "cartesian", + "svg", + "showLegend", + "scatter-like", + "zoomScale" + ], + "meta": { + "description": "The quiver trace type visualizes vector fields using arrows. Specify a vector field using 4 1D arrays: 2 position arrays `x`, `y` and 2 vector component arrays `u`, `v`. The arrows are drawn exactly at the positions given by `x` and `y`. Arrow length and direction are determined by `u` and `v` components." + }, + "type": "quiver" + }, + "sankey": { + "animatable": false, + "attributes": { + "arrangement": { + "description": "If value is `snap` (the default), the node arrangement is assisted by automatic snapping of elements to preserve space between nodes specified via `nodepad`. If value is `perpendicular`, the nodes can only move along a line perpendicular to the flow. If value is `freeform`, the nodes can freely move on the plane. If value is `fixed`, the nodes are stationary.", + "dflt": "snap", + "editType": "calc", + "valType": "enumerated", + "values": [ + "snap", + "perpendicular", + "freeform", + "fixed" + ] + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "domain": { + "column": { + "description": "If there is a layout grid, use the domain for this column in the grid for this sankey trace .", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "editType": "calc", + "role": "object", + "row": { + "description": "If there is a layout grid, use the domain for this row in the grid for this sankey trace .", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "x": { + "description": "Sets the horizontal domain of this sankey trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "calc", + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array" + }, + "y": { + "description": "Sets the vertical domain of this sankey trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], + "editType": "calc", + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array" + } + }, + "hoverinfo": { + "arrayOk": false, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired. Note that this attribute is superseded by `node.hoverinfo` and `node.hoverinfo` for nodes and links respectively.", + "dflt": "all", + "editType": "calc", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [], + "valType": "flaglist" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "calc", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "calc", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "font": { + "color": { + "arrayOk": true, + "editType": "calc", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "calc", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "showarrow": { + "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + } + }, + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "link": { + "arrowlen": { + "description": "Sets the length (in px) of the links arrow, if 0 no arrow will be drawn.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the `link` color. It can be a single value, or an array for specifying color for each `link`. If `link.color` is omitted, then by default, a translucent grey link will be used.", + "editType": "calc", + "valType": "color" + }, + "colorscales": { + "items": { + "concentrationscales": { + "cmax": { + "description": "Sets the upper bound of the color domain.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain.", + "dflt": 0, + "editType": "calc", + "valType": "number" + }, + "colorscale": { + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": [ + [ + 0, + "white" + ], + [ + 1, + "black" +>>>>>>> b50bcc3af (Match arrowhead attributes for annotations) + ] + }, + "rangeselector": { + "activecolor": { + "description": "Sets the background color of the active range selector button.", + "editType": "plot", + "valType": "color" + }, + "bgcolor": { + "description": "Sets the background color of the range selector buttons.", + "dflt": "#eee", + "editType": "plot", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the color of the border enclosing the range selector.", + "dflt": "#444", + "editType": "plot", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) of the border enclosing the range selector.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "buttons": { + "items": { + "button": { + "count": { + "description": "Sets the number of steps to take to update the range. Use with `step` to specify the update interval.", + "dflt": 1, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "description": "Sets the specifications for each buttons. By default, a range selector comes with no buttons.", + "editType": "plot", + "label": { + "description": "Sets the text label to appear on the button.", + "editType": "plot", + "valType": "string" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "step": { + "description": "The unit of measurement that the `count` value will set the range by.", + "dflt": "month", + "editType": "plot", + "valType": "enumerated", + "values": [ + "month", + "year", + "day", + "hour", + "minute", + "second", + "all" + ] + }, + "stepmode": { + "description": "Sets the range update mode. If *backward*, the range update shifts the start of range back *count* times *step* milliseconds. If *todate*, the range update shifts the start of range back to the first timestamp from *count* times *step* milliseconds back. For example, with `step` set to *year* and `count` set to *1* the range update shifts the start of the range back to January 01 of the current year. Month and year *todate* are currently available only for the built-in (Gregorian) calendar.", + "dflt": "backward", + "editType": "plot", + "valType": "enumerated", + "values": [ + "backward", + "todate" + ] + }, + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "visible": { + "description": "Determines whether or not this button is visible.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + } + } + }, + "role": "object" + }, + "editType": "plot", + "font": { + "color": { + "editType": "plot", + "valType": "color" + }, + "description": "Sets the font of the range selector button text.", + "editType": "plot", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string" + }, + "size": { + "editType": "plot", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "visible": { + "description": "Determines whether or not this range selector is visible. Note that range selectors are only available for x axes of `type` set to or auto-typed to *date*.", + "editType": "plot", + "valType": "boolean" + }, + "x": { + "description": "Sets the x position (in normalized coordinates) of the range selector.", + "editType": "plot", + "max": 3, + "min": -2, + "valType": "number" + }, + "xanchor": { + "description": "Sets the range selector's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the range selector.", + "dflt": "left", + "editType": "plot", + "valType": "enumerated", + "values": [ + "auto", + "left", + "center", + "right" + ] + }, + "y": { + "description": "Sets the y position (in normalized coordinates) of the range selector.", + "editType": "plot", + "max": 3, + "min": -2, + "valType": "number" + }, + "yanchor": { + "description": "Sets the range selector's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the range selector.", + "dflt": "bottom", + "editType": "plot", + "valType": "enumerated", + "values": [ + "auto", + "top", + "middle", + "bottom" + ] + } + }, + "rangeslider": { + "autorange": { + "description": "Determines whether or not the range slider range is computed in relation to the input data. If `range` is provided, then `autorange` is set to *false*.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "bgcolor": { + "description": "Sets the background color of the range slider.", + "dflt": "#fff", + "editType": "plot", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the border color of the range slider.", + "dflt": "#444", + "editType": "plot", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the border width of the range slider.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "integer" + }, + "editType": "calc", + "range": { + "description": "Sets the range of the range slider. If not set, defaults to the full xaxis range. If the axis `type` is *log*, then you must take the log of your desired range. If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "autorange": false + }, + "items": [ + { + "editType": "calc", + "impliedEdits": { + "^autorange": false + }, + "valType": "any" + }, + { + "editType": "calc", + "impliedEdits": { + "^autorange": false + }, + "valType": "any" + } + ], + "valType": "info_array" + }, + "role": "object", + "thickness": { + "description": "The height of the range slider as a fraction of the total plot area height.", + "dflt": 0.15, + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number" + }, + "visible": { + "description": "Determines whether or not the range slider will be visible. If visible, perpendicular axes will be set to `fixedrange`", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "yaxis": { + "_isSubplotObj": true, + "editType": "calc", + "range": { + "description": "Sets the range of this axis for the rangeslider.", + "editType": "plot", + "items": [ + { + "editType": "plot", + "valType": "any" + }, + { + "editType": "plot", + "valType": "any" + } + ], + "valType": "info_array" + }, + "rangemode": { + "description": "Determines whether or not the range of this axis in the rangeslider use the same value than in the main plot when zooming in/out. If *auto*, the autorange will be used. If *fixed*, the `range` is used. If *match*, the current range of the corresponding y-axis on the main subplot is used.", + "dflt": "match", + "editType": "calc", + "valType": "enumerated", + "values": [ + "auto", + "fixed", + "match" + ] + }, + "role": "object" + } + }, + "role": "object", + "scaleanchor": { + "description": "If set to another axis id (e.g. `x2`, `y`), the range of this axis changes together with the range of the corresponding axis such that the scale of pixels per unit is in a constant ratio. Both axes are still zoomable, but when you zoom one, the other will zoom the same amount, keeping a fixed midpoint. `constrain` and `constraintoward` determine how we enforce the constraint. You can chain these, ie `yaxis: {scaleanchor: *x*}, xaxis2: {scaleanchor: *y*}` but you can only link axes of the same `type`. The linked axis can have the opposite letter (to constrain the aspect ratio) or the same letter (to match scales across subplots). Loops (`yaxis: {scaleanchor: *x*}, xaxis: {scaleanchor: *y*}` or longer) are redundant and the last constraint encountered will be ignored to avoid possible inconsistent constraints via `scaleratio`. Note that setting axes simultaneously in both a `scaleanchor` and a `matches` constraint is currently forbidden. Setting `false` allows to remove a default constraint (occasionally, you may need to prevent a default `scaleanchor` constraint from being applied, eg. when having an image trace `yaxis: {scaleanchor: \"x\"}` is set automatically in order for pixels to be rendered as squares, setting `yaxis: {scaleanchor: false}` allows to remove the constraint).", + "editType": "plot", + "valType": "enumerated", + "values": [ + "/^x([2-9]|[1-9][0-9]+)?( domain)?$/", + "/^y([2-9]|[1-9][0-9]+)?( domain)?$/", + false + ] + }, + "scaleratio": { + "description": "If this axis is linked to another by `scaleanchor`, this determines the pixel to unit scale ratio. For example, if this value is 10, then every unit on this axis spans 10 times the number of pixels as a unit on the linked axis. Use this for example to create an elevation profile where the vertical scale is exaggerated a fixed amount with respect to the horizontal.", + "dflt": 1, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "ticks", + "valType": "boolean" + }, + "showdividers": { + "description": "Determines whether or not a dividers are drawn between the category levels of this axis. Only has an effect on *multicategory* axes.", + "dflt": true, + "editType": "ticks", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showgrid": { + "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.", + "editType": "ticks", + "valType": "boolean" + }, + "showline": { + "description": "Determines whether or not a line bounding this axis is drawn.", + "dflt": false, + "editType": "ticks+layoutstyle", + "valType": "boolean" + }, + "showspikes": { + "description": "Determines whether or not spikes (aka droplines) are drawn for this axis. Note: This only takes affect when hovermode = closest", + "dflt": false, + "editType": "modebar", + "valType": "boolean" + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "ticks", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "side": { + "description": "Determines whether a x (y) axis is positioned at the *bottom* (*left*) or *top* (*right*) of the plotting area.", + "editType": "plot", + "valType": "enumerated", + "values": [ + "top", + "bottom", + "left", + "right" + ] + }, + "spikecolor": { + "description": "Sets the spike color. If undefined, will use the series color", + "dflt": null, + "editType": "none", + "valType": "color" + }, + "spikedash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "dash", + "editType": "none", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, + "spikemode": { + "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on", + "dflt": "toaxis", + "editType": "none", + "flags": [ + "toaxis", + "across", + "marker" + ], + "valType": "flaglist" + }, + "spikesnap": { + "description": "Determines whether spikelines are stuck to the cursor or to the closest datapoints.", + "dflt": "hovered data", + "editType": "none", + "valType": "enumerated", + "values": [ + "data", + "cursor", + "hovered data" + ] + }, + "spikethickness": { + "description": "Sets the width (in px) of the zero line.", + "dflt": 3, + "editType": "none", + "valType": "number" + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "ticks", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "ticks", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "ticks", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "ticks", + "valType": "color" + }, + "description": "Sets the tick font.", + "editType": "ticks", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "ticks", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "ticks", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "ticks", + "valType": "string" + }, + "size": { + "editType": "ticks", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "ticks", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "ticks", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "ticks", + "items": [ + { + "editType": "ticks", + "valType": "any" + }, + { + "editType": "ticks", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "ticks", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "ticks", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "ticks", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabelindex": { + "arrayOk": true, + "description": "Only for axes with `type` *date* or *linear*. Instead of drawing the major tick label, draw the label for the minor tick that is n positions away from the major tick. E.g. to always draw the label for the minor tick before each major tick, choose `ticklabelindex` -1. This is useful for date axes with `ticklabelmode` *period* if you want to label the period that ends with each major tick instead of the period that begins there.", + "editType": "calc", + "valType": "integer" + }, + "ticklabelindexsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticklabelindex`.", + "editType": "none", + "valType": "string" + }, + "ticklabelmode": { + "description": "Determines where tick labels are drawn with respect to their corresponding ticks and grid lines. Only has an effect for axes of `type` *date* When set to *period*, tick labels are drawn in the middle of the period between ticks.", + "dflt": "instant", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "instant", + "period" + ] + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. Otherwise on *category* and *multicategory* axes the default is *allow*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn with respect to the axis. Please note that top or bottom has no effect on x axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Similarly, left or right has no effect on y axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Has no effect on *multicategory* axes. When used on axes linked by `matches` or `scaleanchor`, no extra padding for inside labels would be added by autorange, so that the scales could match.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelshift": { + "description": "Shifts the tick labels by the specified number of pixels in parallel to the axis. Positive values move the labels in the positive direction of the axis.", + "dflt": 0, + "editType": "ticks", + "valType": "integer" + }, + "ticklabelstandoff": { + "description": "Sets the standoff distance (in px) between the axis tick labels and their default position. A positive `ticklabelstandoff` moves the labels farther away from the plot area if `ticklabelposition` is *outside*, and deeper into the plot area if `ticklabelposition` is *inside*. A negative `ticklabelstandoff` works in the opposite direction, moving outside ticks towards the plot area and inside ticks towards the outside. If the negative value is large enough, inside ticks can even end up outside and vice versa.", + "dflt": 0, + "editType": "ticks", + "valType": "integer" + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "ticks", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "ticks", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided). If *sync*, the number of ticks will sync with the overlayed axis set by `overlaying` property.", + "editType": "ticks", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array", + "sync" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "ticks", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "tickson": { + "description": "Determines where ticks and grid lines are drawn with respect to their corresponding tick labels. Only has an effect for axes of `type` *category* or *multicategory*. When set to *boundaries*, ticks and grid lines are drawn half a category to the left/bottom of labels.", + "dflt": "labels", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "labels", + "boundaries" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "ticks", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "ticks", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "ticks", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "ticks", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "ticks", + "font": { + "color": { + "editType": "ticks", + "valType": "color" + }, + "description": "Sets this axis' title font.", + "editType": "ticks", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "ticks", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "ticks", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "ticks", + "valType": "string" + }, + "size": { + "editType": "ticks", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "ticks", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "standoff": { + "description": "Sets the standoff distance (in px) between the axis labels and the title text The default value is a function of the axis tick labels, the title `font.size` and the axis `linewidth`. Note that the axis title position is always constrained within the margins, so the actual standoff distance is always less than the set or default value. By setting `standoff` and turning on `automargin`, plotly.js will push the margins to fit the axis title at given standoff distance.", + "editType": "ticks", + "min": 0, + "valType": "number" + }, + "text": { + "description": "Sets the title of this axis.", + "editType": "ticks", + "valType": "string" + } + }, +<<<<<<< HEAD +======= + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", + "values": [ + "diameter", + "area" + ] + }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", + "dflt": "circle", + "editType": "calc", + "valType": "string" + }, + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", + "dflt": "markers", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "selected": { + "editType": "calc", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of selected points.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "role": "object" + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "subplot": { + "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", + "dflt": "map", + "editType": "calc", + "valType": "subplotid" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "textfont": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets the icon text font (color=map.layer.paint.text-color, size=map.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "dflt": "Open Sans Regular, Arial Unicode MS Regular", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "role": "object", + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "textposition": { + "arrayOk": false, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "type": "scattermap", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "calc", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "role": "object" + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "map", + "gl", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "The data visualized as scatter point, lines or marker symbols on a MapLibre GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", + "hrName": "scatter_map" + }, + "type": "scattermap" + }, + "scattermapbox": { + "animatable": false, + "attributes": { + "below": { + "description": "Determines if this scattermapbox trace's layers are to be inserted before the layer with the specified ID. By default, scattermapbox layers are inserted above all the base layers. To place the scattermapbox layers above every other layer, set `below` to *''*.", + "editType": "calc", + "valType": "string" + }, + "cluster": { + "color": { + "arrayOk": true, + "description": "Sets the color for each cluster step.", + "editType": "calc", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether clustering is enabled or disabled.", + "editType": "calc", + "valType": "boolean" + }, + "maxzoom": { + "description": "Sets the maximum zoom level. At zoom levels equal to or greater than this, points will never be clustered.", + "dflt": 24, + "editType": "calc", + "max": 24, + "min": 0, + "valType": "number" + }, + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "dflt": 1, + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "size": { + "arrayOk": true, + "description": "Sets the size for each cluster step.", + "dflt": 20, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "step": { + "arrayOk": true, + "description": "Sets how many points it takes to create a cluster or advance to the next cluster step. Use this in conjunction with arrays for `size` and / or `color`. If an integer, steps start at multiples of this number. If an array, each step extends from the given value until one less than the next value.", + "dflt": -1, + "editType": "calc", + "min": -1, + "valType": "number" + }, + "stepsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `step`.", + "editType": "none", + "valType": "string" + } + }, + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "fill": { + "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.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "toself" + ] + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "calc", + "valType": "color" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "calc", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "lon", + "lat", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "editType": "none", + "valType": "string" + }, + "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" + } + }, + "hovertemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "calc", + "valType": "any" + }, + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "editType": "none", + "valType": "string" + }, + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "hovertextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", + "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.", + "editType": "calc", + "valType": "data_array" + }, + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "lat": { + "description": "Sets the latitude coordinates (in degrees North).", + "editType": "calc", + "valType": "data_array" + }, + "latsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lat`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "legendgrouptitle": { + "editType": "style", + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } + }, + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" + }, + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" + }, + "line": { + "color": { + "description": "Sets the line color.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "role": "object", + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "lon": { + "description": "Sets the longitude coordinates (in degrees East).", + "editType": "calc", + "valType": "data_array" + }, + "lonsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lon`.", + "editType": "none", + "valType": "string" + }, + "marker": { + "allowoverlap": { + "description": "Flag to draw all symbols, even if they overlap.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "angle": { + "arrayOk": true, + "description": "Sets the marker orientation from true North, in degrees clockwise. When using the *auto* default, no rotation would be applied in perspective views which is different from using a zero angle.", + "dflt": "auto", + "editType": "calc", + "valType": "number" + }, + "anglesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `angle`.", + "editType": "none", + "valType": "string" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "calc", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "calc", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "calc", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "calc", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "calc", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "calc", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "calc", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "calc", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "calc", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "calc", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "calc", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "calc", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "calc", + "font": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", + "valType": "string" + }, + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", + "values": [ + "diameter", + "area" ] }, + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", + "dflt": "circle", + "editType": "calc", + "valType": "string" + }, "symbolsrc": { "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", "editType": "none", @@ -18976,7 +21070,8 @@ "valType": "string" }, "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", + "dflt": "markers", "editType": "calc", "extras": [ "none" @@ -19001,34 +21096,18 @@ "min": 0, "valType": "number" }, - "r": { - "description": "Sets the radial coordinates", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "r0": { - "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "rsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `r`.", - "editType": "none", - "valType": "string" - }, "selected": { - "editType": "style", + "editType": "calc", "marker": { "color": { "description": "Sets the marker color of selected points.", - "editType": "style", + "editType": "calc", "valType": "color" }, - "editType": "style", + "editType": "calc", "opacity": { "description": "Sets the marker opacity of selected points.", - "editType": "style", + "editType": "calc", "max": 1, "min": 0, "valType": "number" @@ -19036,21 +21115,12 @@ "role": "object", "size": { "description": "Sets the marker size of selected points.", - "editType": "style", + "editType": "calc", "min": 0, "valType": "number" } }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } + "role": "object" }, "selectedpoints": { "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", @@ -19083,90 +21153,40 @@ } }, "subplot": { - "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", - "dflt": "polar", + "description": "mapbox subplots and traces are deprecated! Please consider switching to `map` subplots and traces. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ Sets a reference between this trace's data coordinates and a mapbox subplot. If *mapbox* (the default value), the data refer to `layout.mapbox`. If *mapbox2*, the data refer to `layout.mapbox2`, and so on.", + "dflt": "mapbox", "editType": "calc", "valType": "subplotid" }, "text": { "arrayOk": true, - "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", "dflt": "", "editType": "calc", "valType": "string" }, "textfont": { "color": { - "arrayOk": true, - "editType": "style", + "editType": "calc", "valType": "color" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the text font.", + "description": "Sets the icon text font (color=mapbox.layer.paint.text-color, size=mapbox.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", "editType": "calc", "family": { - "arrayOk": true, "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "dflt": "Open Sans Regular, Arial Unicode MS Regular", "editType": "calc", "noBlank": true, "strict": true, "valType": "string" }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { - "arrayOk": true, "editType": "calc", "min": 1, "valType": "number" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, "style": { - "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", "editType": "calc", @@ -19176,51 +21196,7 @@ "italic" ] }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, "weight": { - "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", "editType": "calc", @@ -19228,18 +21204,13 @@ "normal", "bold" ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "max": 1000, + "min": 1, + "valType": "integer" } }, "textposition": { - "arrayOk": true, + "arrayOk": false, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", "dflt": "middle center", "editType": "calc", @@ -19256,11 +21227,6 @@ "bottom right" ] }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, "textsrc": { "description": "Sets the source reference on Chart Studio Cloud for `text`.", "editType": "none", @@ -19268,15 +21234,15 @@ }, "texttemplate": { "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", "dflt": "", - "editType": "plot", + "editType": "calc", "valType": "string" }, "texttemplatefallback": { "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", "dflt": "-", - "editType": "plot", + "editType": "calc", "valType": "any" }, "texttemplatesrc": { @@ -19284,34 +21250,7 @@ "editType": "none", "valType": "string" }, - "theta": { - "description": "Sets the angular coordinates", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "theta0": { - "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "thetasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `theta`.", - "editType": "none", - "valType": "string" - }, - "thetaunit": { - "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes.", - "dflt": "degrees", - "editType": "calc+clearAxisTypes", - "valType": "enumerated", - "values": [ - "radians", - "degrees", - "gradians" - ] - }, - "type": "scatterpolar", + "type": "scattermapbox", "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", @@ -19323,17 +21262,17 @@ "valType": "any" }, "unselected": { - "editType": "style", + "editType": "calc", "marker": { "color": { "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "style", + "editType": "calc", "valType": "color" }, - "editType": "style", + "editType": "calc", "opacity": { "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "style", + "editType": "calc", "max": 1, "min": 0, "valType": "number" @@ -19341,21 +21280,12 @@ "role": "object", "size": { "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "style", + "editType": "calc", "min": 0, "valType": "number" } }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } + "role": "object" }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", @@ -19370,20 +21300,27 @@ } }, "categories": [ - "polar", + "mapbox", + "gl", "symbols", "showLegend", "scatter-like" ], "meta": { - "description": "The scatterpolar trace type encompasses line charts, scatter charts, text charts, and bubble charts in polar coordinates. The data visualized as scatter point or lines is set in `r` (radial) and `theta` (angular) coordinates Text (appearing either on the chart or on hover only) is via `text`. Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", - "hrName": "scatter_polar" + "description": "*scattermapbox* trace is deprecated! Please consider switching to the *scattermap* trace type and `map` subplots. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ The data visualized as scatter point, lines or marker symbols on a Mapbox GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", + "hrName": "scatter_mapbox" }, - "type": "scatterpolar" + "type": "scattermapbox" }, - "scatterpolargl": { + "scatterpolar": { "animatable": false, "attributes": { + "cliponaxis": { + "description": "Determines whether or not markers and text nodes are clipped about the subplot axes. To show markers and text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*.", + "dflt": false, + "editType": "plot", + "valType": "boolean" + }, "connectgaps": { "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", "dflt": false, @@ -19412,23 +21349,19 @@ "valType": "number" }, "fill": { - "description": "Sets the area to fill with a solid color. Defaults to *none* unless this trace is stacked, then it gets *tonexty* (*tonextx*) if `orientation` is *v* (*h*) Use with `fillcolor` if not *none*. *tozerox* and *tozeroy* fill to x=0 and y=0 respectively. *tonextx* and *tonexty* fill between the endpoints of this trace and the endpoints of the trace before it, connecting those endpoints with straight lines (to make a stacked area graph); if there is no trace before it, they behave like *tozerox* and *tozeroy*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other. Traces in a `stackgroup` will only fill to (or be filled to) other traces in the same group. With multiple `stackgroup`s or some traces stacked and some not, if fill-linked traces are not already consecutive, the later ones will be pushed down in the drawing order.", + "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. scatterpolar has a subset of the options available to scatter. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other.", "dflt": "none", "editType": "calc", "valType": "enumerated", "values": [ "none", - "tozeroy", - "tozerox", - "tonexty", - "tonextx", "toself", "tonext" ] }, "fillcolor": { "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "calc", + "editType": "style", "valType": "color" }, "hoverinfo": { @@ -19659,6 +21592,15 @@ "valType": "boolean" } }, + "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*.", + "editType": "style", + "flags": [ + "points", + "fills" + ], + "valType": "flaglist" + }, "hovertemplate": { "arrayOk": true, "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", @@ -19823,31 +21765,62 @@ "valType": "number" }, "line": { + "backoff": { + "arrayOk": true, + "description": "Sets the line back off from the end point of the nth line segment (in px). This option is useful e.g. to avoid overlap with arrowhead markers. With *auto* the lines would trim before markers if `marker.angleref` is set to *previous*.", + "dflt": "auto", + "editType": "plot", + "min": 0, + "valType": "number" + }, + "backoffsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", + "editType": "none", + "valType": "string" + }, "color": { "description": "Sets the line color.", - "editType": "calc", + "editType": "style", "valType": "color" }, "dash": { - "description": "Sets the style of the lines.", + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", "dflt": "solid", - "editType": "calc", - "valType": "enumerated", + "editType": "style", + "valType": "string", "values": [ - "dash", - "dashdot", + "solid", "dot", + "dash", "longdash", - "longdashdot", - "solid" + "dashdot", + "longdashdot" ] }, "editType": "calc", "role": "object", + "shape": { + "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes.", + "dflt": "linear", + "editType": "plot", + "valType": "enumerated", + "values": [ + "linear", + "spline" + ] + }, + "smoothing": { + "description": "Has an effect only if `shape` is set to *spline* Sets the amount of smoothing. *0* corresponds to no smoothing (equivalent to a *linear* shape).", + "dflt": 1, + "editType": "plot", + "max": 1.3, + "min": 0, + "valType": "number" + }, "width": { "description": "Sets the line width (in px).", "dflt": 2, - "editType": "calc", + "editType": "style", "min": 0, "valType": "number" } @@ -19857,9 +21830,19 @@ "arrayOk": true, "description": "Sets the marker angle in respect to `angleref`.", "dflt": 0, - "editType": "calc", + "editType": "plot", "valType": "angle" }, + "angleref": { + "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen.", + "dflt": "up", + "editType": "plot", + "valType": "enumerated", + "values": [ + "previous", + "up" + ] + }, "anglesrc": { "description": "Sets the source reference on Chart Studio Cloud for `angle`.", "editType": "none", @@ -19882,7 +21865,7 @@ "cmax": { "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", "dflt": null, - "editType": "calc", + "editType": "plot", "impliedEdits": { "cauto": false }, @@ -19898,7 +21881,7 @@ "cmin": { "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", "dflt": null, - "editType": "calc", + "editType": "plot", "impliedEdits": { "cauto": false }, @@ -19907,7 +21890,7 @@ "color": { "arrayOk": true, "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "calc", + "editType": "style", "valType": "color" }, "coloraxis": { @@ -19921,35 +21904,35 @@ "bgcolor": { "description": "Sets the color of padded area.", "dflt": "rgba(0,0,0,0)", - "editType": "calc", + "editType": "colorbars", "valType": "color" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", "dflt": 0, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, "dtick": { "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", + "editType": "colorbars", "impliedEdits": { "tickmode": "linear" }, "valType": "any" }, - "editType": "calc", + "editType": "colorbars", "exponentformat": { "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", "dflt": "B", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "none", @@ -19964,20 +21947,20 @@ "labelalias": { "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", "dflt": false, - "editType": "calc", + "editType": "colorbars", "valType": "any" }, "len": { "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, "lenmode": { "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", "dflt": "fraction", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "fraction", @@ -19987,21 +21970,21 @@ "minexponent": { "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", "dflt": 3, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, "nticks": { "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", "dflt": 0, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "integer" }, "orientation": { "description": "Sets the orientation of the colorbar.", "dflt": "v", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "h", @@ -20011,13 +21994,13 @@ "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, @@ -20025,13 +22008,13 @@ "separatethousands": { "description": "If \"true\", even 4-digit integers are separated", "dflt": false, - "editType": "calc", + "editType": "colorbars", "valType": "boolean" }, "showexponent": { "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -20043,13 +22026,13 @@ "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, - "editType": "calc", + "editType": "colorbars", "valType": "boolean" }, "showtickprefix": { "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -20061,7 +22044,7 @@ "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -20073,14 +22056,14 @@ "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", "dflt": 30, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, "thicknessmode": { "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", "dflt": "pixels", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "fraction", @@ -20089,7 +22072,7 @@ }, "tick0": { "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", + "editType": "colorbars", "impliedEdits": { "tickmode": "linear" }, @@ -20098,25 +22081,25 @@ "tickangle": { "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", "dflt": "auto", - "editType": "calc", + "editType": "colorbars", "valType": "angle" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", - "editType": "calc", + "editType": "colorbars", "valType": "color" }, "tickfont": { "color": { - "editType": "calc", + "editType": "colorbars", "valType": "color" }, "description": "Sets the color bar's tick label font", - "editType": "calc", + "editType": "colorbars", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "colorbars", "noBlank": true, "strict": true, "valType": "string" @@ -20124,7 +22107,7 @@ "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "extras": [ "none" ], @@ -20139,18 +22122,18 @@ "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "size": { - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "number" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -20160,7 +22143,7 @@ "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -20172,7 +22155,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -20186,7 +22169,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -20199,7 +22182,7 @@ "tickformat": { "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "tickformatstops": { @@ -20207,41 +22190,41 @@ "tickformatstop": { "dtickrange": { "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", + "editType": "colorbars", "items": [ { - "editType": "calc", + "editType": "colorbars", "valType": "any" }, { - "editType": "calc", + "editType": "colorbars", "valType": "any" } ], "valType": "info_array" }, - "editType": "calc", + "editType": "colorbars", "enabled": { "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", "dflt": true, - "editType": "calc", + "editType": "colorbars", "valType": "boolean" }, "name": { "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "role": "object", "templateitemname": { "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "value": { "description": "string - dtickformat for described zoom level, the same as *tickformat*", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string" } } @@ -20250,7 +22233,7 @@ }, "ticklabeloverflow": { "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "allow", @@ -20261,7 +22244,7 @@ "ticklabelposition": { "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", "dflt": "outside", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "outside", @@ -20279,20 +22262,20 @@ "ticklabelstep": { "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "integer" }, "ticklen": { "description": "Sets the tick length (in px).", "dflt": 5, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, "tickmode": { "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", + "editType": "colorbars", "impliedEdits": {}, "valType": "enumerated", "values": [ @@ -20304,13 +22287,13 @@ "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "ticks": { "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "outside", @@ -20321,12 +22304,12 @@ "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "ticktext": { "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", + "editType": "colorbars", "valType": "data_array" }, "ticktextsrc": { @@ -20336,7 +22319,7 @@ }, "tickvals": { "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", + "editType": "colorbars", "valType": "data_array" }, "tickvalssrc": { @@ -20347,22 +22330,22 @@ "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, "title": { - "editType": "calc", + "editType": "colorbars", "font": { "color": { - "editType": "calc", + "editType": "colorbars", "valType": "color" }, "description": "Sets this color bar's title font.", - "editType": "calc", + "editType": "colorbars", "family": { "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", + "editType": "colorbars", "noBlank": true, "strict": true, "valType": "string" @@ -20370,7 +22353,7 @@ "lineposition": { "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "extras": [ "none" ], @@ -20385,18 +22368,18 @@ "shadow": { "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", "dflt": "none", - "editType": "calc", + "editType": "colorbars", "valType": "string" }, "size": { - "editType": "calc", + "editType": "colorbars", "min": 1, "valType": "number" }, "style": { "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -20406,7 +22389,7 @@ "textcase": { "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -20418,7 +22401,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -20432,7 +22415,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -20445,7 +22428,7 @@ "role": "object", "side": { "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "right", @@ -20455,18 +22438,18 @@ }, "text": { "description": "Sets the title of the color bar.", - "editType": "calc", + "editType": "colorbars", "valType": "string" } }, "x": { "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", + "editType": "colorbars", "valType": "number" }, "xanchor": { "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "left", @@ -20477,14 +22460,14 @@ "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", "dflt": 10, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, "xref": { "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", "dflt": "paper", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "container", @@ -20493,12 +22476,12 @@ }, "y": { "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", + "editType": "colorbars", "valType": "number" }, "yanchor": { "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "top", @@ -20509,14 +22492,14 @@ "ypad": { "description": "Sets the amount of padding (in px) along the y direction.", "dflt": 10, - "editType": "calc", + "editType": "colorbars", "min": 0, "valType": "number" }, "yref": { "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", "dflt": "paper", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "container", @@ -20539,6 +22522,39 @@ "valType": "string" }, "editType": "calc", + "gradient": { + "color": { + "arrayOk": true, + "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", + "editType": "calc", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "editType": "calc", + "role": "object", + "type": { + "arrayOk": true, + "description": "Sets the type of gradient used to fill the markers", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "radial", + "horizontal", + "vertical", + "none" + ] + }, + "typesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `type`.", + "editType": "none", + "valType": "string" + } + }, "line": { "autocolorscale": { "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", @@ -20557,7 +22573,7 @@ "cmax": { "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", "dflt": null, - "editType": "calc", + "editType": "plot", "impliedEdits": { "cauto": false }, @@ -20573,7 +22589,7 @@ "cmin": { "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", "dflt": null, - "editType": "calc", + "editType": "plot", "impliedEdits": { "cauto": false }, @@ -20582,7 +22598,7 @@ "color": { "arrayOk": true, "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "calc", + "editType": "style", "valType": "color" }, "coloraxis": { @@ -20610,14 +22626,14 @@ "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", "dflt": false, - "editType": "calc", + "editType": "plot", "valType": "boolean" }, "role": "object", "width": { "arrayOk": true, "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "calc", + "editType": "style", "min": 0, "valType": "number" }, @@ -20627,10 +22643,17 @@ "valType": "string" } }, + "maxdisplayed": { + "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, "opacity": { "arrayOk": true, "description": "Sets the marker opacity.", - "editType": "calc", + "editType": "style", "max": 1, "min": 0, "valType": "number" @@ -20643,7 +22666,7 @@ "reversescale": { "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", "dflt": false, - "editType": "calc", + "editType": "plot", "valType": "boolean" }, "role": "object", @@ -20689,11 +22712,24 @@ "editType": "none", "valType": "string" }, + "standoff": { + "arrayOk": true, + "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "standoffsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", + "editType": "none", + "valType": "string" + }, "symbol": { "arrayOk": true, "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", "dflt": "circle", - "editType": "calc", + "editType": "style", "valType": "enumerated", "values": [ 0, @@ -21184,844 +23220,2236 @@ "arrow-wide-open" ] }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" + } + }, + "meta": { + "arrayOk": true, + "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", + "editType": "plot", + "valType": "any" + }, + "metasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "editType": "none", + "valType": "string" + }, + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" + }, + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "r": { + "description": "Sets the radial coordinates", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "r0": { + "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "rsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `r`.", + "editType": "none", + "valType": "string" + }, + "selected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of selected points.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "selectedpoints": { + "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", + "editType": "calc", + "valType": "any" + }, + "showlegend": { + "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", + "dflt": true, + "editType": "style", + "valType": "boolean" + }, + "stream": { + "editType": "calc", + "maxpoints": { + "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", + "dflt": 500, + "editType": "calc", + "max": 10000, + "min": 0, + "valType": "number" + }, + "role": "object", + "token": { + "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + } + }, + "subplot": { + "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", + "dflt": "polar", + "editType": "calc", + "valType": "subplotid" + }, + "text": { + "arrayOk": true, + "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "textfont": { + "color": { + "arrayOk": true, + "editType": "style", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the text font.", + "editType": "calc", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "textposition": { + "arrayOk": true, + "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", + "dflt": "middle center", + "editType": "calc", + "valType": "enumerated", + "values": [ + "top left", + "top center", + "top right", + "middle left", + "middle center", + "middle right", + "bottom left", + "bottom center", + "bottom right" + ] + }, + "textpositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", + "editType": "none", + "valType": "string" + }, + "textsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `text`.", + "editType": "none", + "valType": "string" + }, + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", + "dflt": "", + "editType": "plot", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "theta": { + "description": "Sets the angular coordinates", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "theta0": { + "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "thetasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `theta`.", + "editType": "none", + "valType": "string" + }, + "thetaunit": { + "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes.", + "dflt": "degrees", + "editType": "calc+clearAxisTypes", + "valType": "enumerated", + "values": [ + "radians", + "degrees", + "gradians" + ] + }, + "type": "scatterpolar", + "uid": { + "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", + "editType": "plot", + "valType": "string" + }, + "uirevision": { + "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", + "editType": "none", + "valType": "any" + }, + "unselected": { + "editType": "style", + "marker": { + "color": { + "description": "Sets the marker color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", + "editType": "style", + "min": 0, + "valType": "number" + } + }, + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "style", + "valType": "color" + }, + "editType": "style", + "role": "object" + } + }, + "visible": { + "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", + "dflt": true, + "editType": "calc", + "valType": "enumerated", + "values": [ + true, + false, + "legendonly" + ] + } + }, + "categories": [ + "polar", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "The scatterpolar trace type encompasses line charts, scatter charts, text charts, and bubble charts in polar coordinates. The data visualized as scatter point or lines is set in `r` (radial) and `theta` (angular) coordinates Text (appearing either on the chart or on hover only) is via `text`. Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", + "hrName": "scatter_polar" + }, + "type": "scatterpolar" + }, + "scatterpolargl": { + "animatable": false, + "attributes": { + "connectgaps": { + "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "customdata": { + "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", + "valType": "string" + }, + "dr": { + "description": "Sets the r coordinate step.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "dtheta": { + "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates.", + "editType": "calc", + "valType": "number" + }, + "fill": { + "description": "Sets the area to fill with a solid color. Defaults to *none* unless this trace is stacked, then it gets *tonexty* (*tonextx*) if `orientation` is *v* (*h*) Use with `fillcolor` if not *none*. *tozerox* and *tozeroy* fill to x=0 and y=0 respectively. *tonextx* and *tonexty* fill between the endpoints of this trace and the endpoints of the trace before it, connecting those endpoints with straight lines (to make a stacked area graph); if there is no trace before it, they behave like *tozerox* and *tozeroy*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other. Traces in a `stackgroup` will only fill to (or be filled to) other traces in the same group. With multiple `stackgroup`s or some traces stacked and some not, if fill-linked traces are not already consecutive, the later ones will be pushed down in the drawing order.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "tozeroy", + "tozerox", + "tonexty", + "tonextx", + "toself", + "tonext" + ] + }, + "fillcolor": { + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", + "editType": "calc", + "valType": "color" + }, + "hoverinfo": { + "arrayOk": true, + "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", + "dflt": "all", + "editType": "none", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "r", + "theta", + "text", + "name" + ], + "valType": "flaglist" + }, + "hoverinfosrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", + "editType": "none", + "valType": "string" + }, + "hoverlabel": { + "align": { + "arrayOk": true, + "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", + "dflt": "auto", + "editType": "none", + "valType": "enumerated", + "values": [ + "left", + "right", + "auto" + ] + }, + "alignsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "editType": "none", + "valType": "string" + }, + "bgcolor": { + "arrayOk": true, + "description": "Sets the background color of the hover labels for this trace", + "editType": "none", + "valType": "color" + }, + "bgcolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "editType": "none", + "valType": "string" + }, + "bordercolor": { + "arrayOk": true, + "description": "Sets the border color of the hover labels for this trace.", + "editType": "none", + "valType": "color" + }, + "bordercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "editType": "none", + "valType": "string" + }, + "editType": "none", + "font": { + "color": { + "arrayOk": true, + "editType": "none", + "valType": "color" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "description": "Sets the font used in hover labels.", + "editType": "none", + "family": { + "arrayOk": true, + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "none", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", + "editType": "none", + "valType": "string" + }, + "lineposition": { + "arrayOk": true, + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "none", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "linepositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "shadow": { + "arrayOk": true, + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "none", + "valType": "string" + }, + "shadowsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "editType": "none", + "valType": "string" + }, + "size": { + "arrayOk": true, + "editType": "none", + "min": 1, + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "style": { + "arrayOk": true, + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" + }, + "textcase": { + "arrayOk": true, + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", + "editType": "none", + "valType": "string" + }, + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "none", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", + "editType": "none", + "valType": "string" + }, + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "none", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" + } + }, + "namelength": { + "arrayOk": true, + "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", + "dflt": 15, + "editType": "none", + "min": -1, + "valType": "integer" + }, + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", "editType": "none", "valType": "string" + }, + "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" } }, - "meta": { + "hovertemplate": { "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", + "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "hovertemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "none", "valType": "any" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", "editType": "none", "valType": "string" }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", + "hovertext": { + "arrayOk": true, + "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", + "dflt": "", + "editType": "style", + "valType": "string" + }, + "hovertextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", + "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.", "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" + "valType": "data_array" }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "idssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ids`.", + "editType": "none", + "valType": "string" + }, + "legend": { + "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", + "dflt": "legend", + "editType": "style", + "valType": "subplotid" + }, + "legendgroup": { + "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", + "dflt": "", "editType": "style", "valType": "string" }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, + "legendgrouptitle": { "editType": "style", - "max": 1, - "min": 0, - "valType": "number" + "font": { + "color": { + "editType": "style", + "valType": "color" + }, + "description": "Sets this legend group's title font.", + "editType": "style", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "style", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "style", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "style", + "valType": "string" + }, + "size": { + "editType": "style", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "style", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "style", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", + "valType": "string" + } }, - "r": { - "description": "Sets the radial coordinates", - "editType": "calc+clearAxisTypes", - "valType": "data_array" + "legendrank": { + "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", + "dflt": 1000, + "editType": "style", + "valType": "number" }, - "r0": { - "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "min": 0, + "valType": "number" }, - "rsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `r`.", - "editType": "none", - "valType": "string" + "line": { + "color": { + "description": "Sets the line color.", + "editType": "calc", + "valType": "color" + }, + "dash": { + "description": "Sets the style of the lines.", + "dflt": "solid", + "editType": "calc", + "valType": "enumerated", + "values": [ + "dash", + "dashdot", + "dot", + "longdash", + "longdashdot", + "solid" + ] + }, + "editType": "calc", + "role": "object", + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + } }, - "selected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "style", + "marker": { + "angle": { + "arrayOk": true, + "description": "Sets the marker angle in respect to `angleref`.", + "dflt": 0, + "editType": "calc", + "valType": "angle" + }, + "anglesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `angle`.", + "editType": "none", + "valType": "string" + }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "color": { + "arrayOk": true, + "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", + "editType": "calc", + "valType": "color" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "calc", "valType": "color" }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "style", - "max": 1, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "calc", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "calc", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "calc", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "calc", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "calc", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "calc", "min": 0, "valType": "number" }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "style", - "valType": "color" + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "calc", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" }, - "editType": "style", - "role": "object" - } - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", - "dflt": "polar", - "editType": "calc", - "valType": "subplotid" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the text font.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "bold" - ] - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "textposition": { - "arrayOk": true, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "theta": { - "description": "Sets the angular coordinates", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "theta0": { - "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "thetasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `theta`.", - "editType": "none", - "valType": "string" - }, - "thetaunit": { - "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes.", - "dflt": "degrees", - "editType": "calc+clearAxisTypes", - "valType": "enumerated", - "values": [ - "radians", - "degrees", - "gradians" - ] - }, - "type": "scatterpolargl", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "style", + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "calc", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "calc", "valType": "color" }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" + "tickfont": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "calc", + "valType": "string" }, - "editType": "style", - "role": "object" - } - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "gl", - "regl", - "polar", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The scatterpolargl trace type encompasses line charts, scatter charts, and bubble charts in polar coordinates using the WebGL plotting engine. The data visualized as scatter point or lines is set in `r` (radial) and `theta` (angular) coordinates Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", - "hrName": "scatter_polar_gl" - }, - "type": "scatterpolargl" - }, - "quiver": { - "animatable": true, - "attributes": { - "angle": { - "description": "Angle of arrowhead in radians. Default = π/9", - "dflt": 0.3490658503988659, - "editType": "calc", - "max": 1.5707963267948966, - "min": 0, - "valType": "number" - }, - "arrow_scale": { - "description": "Value multiplied to length of barb to get length of arrowhead. Default = 0.3", - "dflt": 0.3, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "hoverdistance": { - "description": "Maximum distance (in pixels) to look for nearby arrows on hover.", - "dflt": 20, - "editType": "calc", - "min": -1, - "valType": "number" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "u", - "v", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "calc", + "items": [ + { + "editType": "calc", + "valType": "any" + }, + { + "editType": "calc", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "calc", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "calc", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "calc", + "valType": "string" + } + } + }, + "role": "object" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "calc", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "calc", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "calc", "valType": "string" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "calc", "valType": "string" }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "calc", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", "editType": "none", "valType": "string" }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "calc", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", "editType": "none", "valType": "string" }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "calc", + "font": { + "color": { + "editType": "calc", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "calc", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "calc", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "calc", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "calc", + "valType": "string" + }, + "size": { + "editType": "calc", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "calc", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "calc", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "calc", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "calc", "valType": "number" }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "italic" + "left", + "center", + "right" ] }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "container", + "paper" ] }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "calc", + "valType": "number" }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "calc", "valType": "enumerated", "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "top", + "middle", + "bottom" ] }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "calc", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] } }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", "editType": "none", "valType": "string" }, - "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" - } - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `u`, `v`, `text` and `name`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "ids": { - "anim": true, - "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.", "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { + "line": { + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, "color": { - "editType": "style", + "arrayOk": true, + "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", + "editType": "calc", "valType": "color" }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorscale": { + "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", "valType": "string" }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" + "editType": "calc", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean" }, "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, + "width": { + "arrayOk": true, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "editType": "calc", + "min": 0, "valType": "number" }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" + "widthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `width`.", + "editType": "none", + "valType": "string" } }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", + "opacity": { + "arrayOk": true, + "description": "Sets the marker opacity.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "opacitysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", + "editType": "none", "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "color": { - "description": "Sets the color of the arrow lines.", - "dflt": "#000", - "editType": "style", - "valType": "color" }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "style", - "valType": "string", + "reversescale": { + "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "role": "object", + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + }, + "size": { + "arrayOk": true, + "description": "Sets the marker size (in px).", + "dflt": 6, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemin": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "sizemode": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", + "dflt": "diameter", + "editType": "calc", + "valType": "enumerated", "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" + "diameter", + "area" ] }, - "editType": "style", - "role": "object", - "shape": { - "description": "Determines the line shape.", - "dflt": "linear", - "editType": "plot", + "sizeref": { + "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" + }, + "symbol": { + "arrayOk": true, + "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", + "dflt": "circle", + "editType": "calc", "valType": "enumerated", "values": [ - "linear", - "spline", - "hv", - "vh", - "hvh", - "vhv" + 0, + "0", + "circle", + 100, + "100", + "circle-open", + 200, + "200", + "circle-dot", + 300, + "300", + "circle-open-dot", + 1, + "1", + "square", + 101, + "101", + "square-open", + 201, + "201", + "square-dot", + 301, + "301", + "square-open-dot", + 2, + "2", + "diamond", + 102, + "102", + "diamond-open", + 202, + "202", + "diamond-dot", + 302, + "302", + "diamond-open-dot", + 3, + "3", + "cross", + 103, + "103", + "cross-open", + 203, + "203", + "cross-dot", + 303, + "303", + "cross-open-dot", + 4, + "4", + "x", + 104, + "104", + "x-open", + 204, + "204", + "x-dot", + 304, + "304", + "x-open-dot", + 5, + "5", + "triangle-up", + 105, + "105", + "triangle-up-open", + 205, + "205", + "triangle-up-dot", + 305, + "305", + "triangle-up-open-dot", + 6, + "6", + "triangle-down", + 106, + "106", + "triangle-down-open", + 206, + "206", + "triangle-down-dot", + 306, + "306", + "triangle-down-open-dot", + 7, + "7", + "triangle-left", + 107, + "107", + "triangle-left-open", + 207, + "207", + "triangle-left-dot", + 307, + "307", + "triangle-left-open-dot", + 8, + "8", + "triangle-right", + 108, + "108", + "triangle-right-open", + 208, + "208", + "triangle-right-dot", + 308, + "308", + "triangle-right-open-dot", + 9, + "9", + "triangle-ne", + 109, + "109", + "triangle-ne-open", + 209, + "209", + "triangle-ne-dot", + 309, + "309", + "triangle-ne-open-dot", + 10, + "10", + "triangle-se", + 110, + "110", + "triangle-se-open", + 210, + "210", + "triangle-se-dot", + 310, + "310", + "triangle-se-open-dot", + 11, + "11", + "triangle-sw", + 111, + "111", + "triangle-sw-open", + 211, + "211", + "triangle-sw-dot", + 311, + "311", + "triangle-sw-open-dot", + 12, + "12", + "triangle-nw", + 112, + "112", + "triangle-nw-open", + 212, + "212", + "triangle-nw-dot", + 312, + "312", + "triangle-nw-open-dot", + 13, + "13", + "pentagon", + 113, + "113", + "pentagon-open", + 213, + "213", + "pentagon-dot", + 313, + "313", + "pentagon-open-dot", + 14, + "14", + "hexagon", + 114, + "114", + "hexagon-open", + 214, + "214", + "hexagon-dot", + 314, + "314", + "hexagon-open-dot", + 15, + "15", + "hexagon2", + 115, + "115", + "hexagon2-open", + 215, + "215", + "hexagon2-dot", + 315, + "315", + "hexagon2-open-dot", + 16, + "16", + "octagon", + 116, + "116", + "octagon-open", + 216, + "216", + "octagon-dot", + 316, + "316", + "octagon-open-dot", + 17, + "17", + "star", + 117, + "117", + "star-open", + 217, + "217", + "star-dot", + 317, + "317", + "star-open-dot", + 18, + "18", + "hexagram", + 118, + "118", + "hexagram-open", + 218, + "218", + "hexagram-dot", + 318, + "318", + "hexagram-open-dot", + 19, + "19", + "star-triangle-up", + 119, + "119", + "star-triangle-up-open", + 219, + "219", + "star-triangle-up-dot", + 319, + "319", + "star-triangle-up-open-dot", + 20, + "20", + "star-triangle-down", + 120, + "120", + "star-triangle-down-open", + 220, + "220", + "star-triangle-down-dot", + 320, + "320", + "star-triangle-down-open-dot", + 21, + "21", + "star-square", + 121, + "121", + "star-square-open", + 221, + "221", + "star-square-dot", + 321, + "321", + "star-square-open-dot", + 22, + "22", + "star-diamond", + 122, + "122", + "star-diamond-open", + 222, + "222", + "star-diamond-dot", + 322, + "322", + "star-diamond-open-dot", + 23, + "23", + "diamond-tall", + 123, + "123", + "diamond-tall-open", + 223, + "223", + "diamond-tall-dot", + 323, + "323", + "diamond-tall-open-dot", + 24, + "24", + "diamond-wide", + 124, + "124", + "diamond-wide-open", + 224, + "224", + "diamond-wide-dot", + 324, + "324", + "diamond-wide-open-dot", + 25, + "25", + "hourglass", + 125, + "125", + "hourglass-open", + 26, + "26", + "bowtie", + 126, + "126", + "bowtie-open", + 27, + "27", + "circle-cross", + 127, + "127", + "circle-cross-open", + 28, + "28", + "circle-x", + 128, + "128", + "circle-x-open", + 29, + "29", + "square-cross", + 129, + "129", + "square-cross-open", + 30, + "30", + "square-x", + 130, + "130", + "square-x-open", + 31, + "31", + "diamond-cross", + 131, + "131", + "diamond-cross-open", + 32, + "32", + "diamond-x", + 132, + "132", + "diamond-x-open", + 33, + "33", + "cross-thin", + 133, + "133", + "cross-thin-open", + 34, + "34", + "x-thin", + 134, + "134", + "x-thin-open", + 35, + "35", + "asterisk", + 135, + "135", + "asterisk-open", + 36, + "36", + "hash", + 136, + "136", + "hash-open", + 236, + "236", + "hash-dot", + 336, + "336", + "hash-open-dot", + 37, + "37", + "y-up", + 137, + "137", + "y-up-open", + 38, + "38", + "y-down", + 138, + "138", + "y-down-open", + 39, + "39", + "y-left", + 139, + "139", + "y-left-open", + 40, + "40", + "y-right", + 140, + "140", + "y-right-open", + 41, + "41", + "line-ew", + 141, + "141", + "line-ew-open", + 42, + "42", + "line-ns", + 142, + "142", + "line-ns-open", + 43, + "43", + "line-ne", + 143, + "143", + "line-ne-open", + 44, + "44", + "line-nw", + 144, + "144", + "line-nw-open", + 45, + "45", + "arrow-up", + 145, + "145", + "arrow-up-open", + 46, + "46", + "arrow-down", + 146, + "146", + "arrow-down-open", + 47, + "47", + "arrow-left", + 147, + "147", + "arrow-left-open", + 48, + "48", + "arrow-right", + 148, + "148", + "arrow-right-open", + 49, + "49", + "arrow-bar-up", + 149, + "149", + "arrow-bar-up-open", + 50, + "50", + "arrow-bar-down", + 150, + "150", + "arrow-bar-down-open", + 51, + "51", + "arrow-bar-left", + 151, + "151", + "arrow-bar-left-open", + 52, + "52", + "arrow-bar-right", + 152, + "152", + "arrow-bar-right-open", + 53, + "53", + "arrow", + 153, + "153", + "arrow-open", + 54, + "54", + "arrow-wide", + 154, + "154", + "arrow-wide-open" ] }, - "simplify": { - "description": "Simplifies lines by removing nearly-overlapping points.", - "dflt": true, - "editType": "plot", - "valType": "boolean" - }, - "smoothing": { - "description": "Has an effect only if `shape` is set to *spline*. Sets the amount of smoothing.", - "dflt": 1, - "editType": "plot", - "max": 1.3, - "min": 0, - "valType": "number" - }, - "width": { - "description": "Sets the width (in px) of the arrow lines.", - "dflt": 1, - "editType": "style", - "min": 0, - "valType": "number" + "symbolsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", + "editType": "none", + "valType": "string" } }, "meta": { @@ -22035,67 +25463,67 @@ "editType": "none", "valType": "string" }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Determines whether `sizeref` is set as a *scaled* (unitless) scalar (normalized by the max u/v norm in the vector field), as an *absolute* value (in the same units as the vector field), or *raw* to use the raw vector lengths.", - "dflt": "scaled", - "editType": "calc", - "valType": "enumerated", - "values": [ - "scaled", - "absolute", - "raw" - ] - }, - "sizeref": { - "description": "Adjusts the arrow size scaling. The arrow length is determined by the vector norm multiplied by `sizeref`, optionally normalized when `sizemode` is *scaled*.", + "mode": { + "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", "editType": "calc", - "min": 0, - "valType": "number" + "extras": [ + "none" + ], + "flags": [ + "lines", + "markers", + "text" + ], + "valType": "flaglist" }, - "anchor": { - "description": "Sets the arrows' anchor with respect to their (x,y) positions. Use *tail* to place (x,y) at the base, *tip* to place (x,y) at the head, or *cm*/*center*/*middle* to center the arrow on (x,y).", - "dflt": "tail", - "editType": "calc", - "valType": "enumerated", - "values": [ - "tip", - "tail", - "cm", - "center", - "middle" - ] + "name": { + "description": "Sets the trace name. The trace name appears as the legend item and on hover.", + "editType": "style", + "valType": "string" }, - "scaleratio": { - "description": "The ratio between the scale of the y-axis and the scale of the x-axis (scale_y / scale_x). Default = null, the scale ratio is not fixed.", - "editType": "calc", + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, "min": 0, "valType": "number" }, + "r": { + "description": "Sets the radial coordinates", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "r0": { + "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "rsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `r`.", + "editType": "none", + "valType": "string" + }, "selected": { "editType": "style", - "line": { + "marker": { "color": { - "description": "Sets the line color of selected points.", + "description": "Sets the marker color of selected points.", "editType": "style", "valType": "color" }, "editType": "style", + "opacity": { + "description": "Sets the marker opacity of selected points.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, "role": "object", - "width": { - "description": "Sets the line width of selected points.", + "size": { + "description": "Sets the marker size of selected points.", "editType": "style", "min": 0, "valType": "number" @@ -22104,7 +25532,7 @@ "role": "object", "textfont": { "color": { - "description": "Sets the text font color of selected points, applied only when a selection exists.", + "description": "Sets the text font color of selected points.", "editType": "style", "valType": "color" }, @@ -22142,16 +25570,23 @@ "valType": "string" } }, + "subplot": { + "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", + "dflt": "polar", + "editType": "calc", + "valType": "subplotid" + }, "text": { - "anim": true, - "description": "Sets text elements associated with each (x,y) pair.", + "arrayOk": true, + "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", + "dflt": "", "editType": "calc", - "valType": "data_array" + "valType": "string" }, "textfont": { "color": { "arrayOk": true, - "editType": "style", + "editType": "calc", "valType": "color" }, "colorsrc": { @@ -22174,39 +25609,7 @@ "editType": "none", "valType": "string" }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, "size": { "arrayOk": true, "editType": "calc", @@ -22234,24 +25637,6 @@ "editType": "none", "valType": "string" }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, "variant": { "arrayOk": true, "description": "Sets the variant of the font.", @@ -22260,11 +25645,7 @@ "valType": "enumerated", "values": [ "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "small-caps" ] }, "variantsrc": { @@ -22277,13 +25658,11 @@ "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", "editType": "calc", - "extras": [ + "valType": "enumerated", + "values": [ "normal", "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" + ] }, "weightsrc": { "description": "Sets the source reference on Chart Studio Cloud for `weight`.", @@ -22292,6 +25671,7 @@ } }, "textposition": { + "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", "dflt": "middle center", "editType": "calc", @@ -22308,20 +25688,63 @@ "bottom right" ] }, + "textpositionsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", + "editType": "none", + "valType": "string" + }, "textsrc": { "description": "Sets the source reference on Chart Studio Cloud for `text`.", "editType": "none", "valType": "string" }, - "type": "quiver", - "u": { - "anim": true, - "description": "Sets the x components of the arrow vectors.", - "editType": "calc", + "texttemplate": { + "arrayOk": true, + "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", + "dflt": "", + "editType": "plot", + "valType": "string" + }, + "texttemplatefallback": { + "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", + "dflt": "-", + "editType": "plot", + "valType": "any" + }, + "texttemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", + "editType": "none", + "valType": "string" + }, + "theta": { + "description": "Sets the angular coordinates", + "editType": "calc+clearAxisTypes", "valType": "data_array" }, + "theta0": { + "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "thetasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `theta`.", + "editType": "none", + "valType": "string" + }, + "thetaunit": { + "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes.", + "dflt": "degrees", + "editType": "calc+clearAxisTypes", + "valType": "enumerated", + "values": [ + "radians", + "degrees", + "gradians" + ] + }, + "type": "scatterpolargl", "uid": { - "anim": true, "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", "valType": "string" @@ -22333,16 +25756,23 @@ }, "unselected": { "editType": "style", - "line": { + "marker": { "color": { - "description": "Sets the line color of unselected points.", + "description": "Sets the marker color of unselected points, applied only when a selection exists.", "editType": "style", "valType": "color" }, "editType": "style", + "opacity": { + "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, "role": "object", - "width": { - "description": "Sets the line width of unselected points.", + "size": { + "description": "Sets the marker size of unselected points, applied only when a selection exists.", "editType": "style", "min": 0, "valType": "number" @@ -22359,17 +25789,6 @@ "role": "object" } }, - "usrc": { - "description": "Sets the source reference on Chart Studio Cloud for `u`.", - "editType": "none", - "valType": "string" - }, - "v": { - "anim": true, - "description": "Sets the y components of the arrow vectors.", - "editType": "calc", - "valType": "data_array" - }, "visible": { "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", "dflt": true, @@ -22380,58 +25799,21 @@ false, "legendonly" ] - }, - "vsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `v`.", - "editType": "none", - "valType": "string" - }, - "x": { - "anim": true, - "description": "Sets the x coordinates of the arrow locations.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "xaxis": { - "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", - "dflt": "x", - "editType": "calc+clearAxisTypes", - "valType": "subplotid" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "anim": true, - "description": "Sets the y coordinates of the arrow locations.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "yaxis": { - "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", - "dflt": "y", - "editType": "calc+clearAxisTypes", - "valType": "subplotid" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" } }, "categories": [ - "cartesian", - "svg", + "gl", + "regl", + "polar", + "symbols", "showLegend", - "scatter-like", - "zoomScale" + "scatter-like" ], "meta": { - "description": "The quiver trace type visualizes vector fields using arrows. Specify a vector field using 4 1D arrays: 2 position arrays `x`, `y` and 2 vector component arrays `u`, `v`. The arrows are drawn exactly at the positions given by `x` and `y`. Arrow length and direction are determined by `u` and `v` components." + "description": "The scatterpolargl trace type encompasses line charts, scatter charts, and bubble charts in polar coordinates using the WebGL plotting engine. The data visualized as scatter point or lines is set in `r` (radial) and `theta` (angular) coordinates Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", + "hrName": "scatter_polar_gl" }, - "type": "quiver" + "type": "scatterpolargl" }, "scattersmith": { "animatable": false, From aa65916815c6692f0c25180bbcda588baaadd975 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 12:14:48 -0800 Subject: [PATCH 06/14] Derive scaling from axes --- src/traces/quiver/attributes.js | 6 ------ src/traces/quiver/defaults.js | 1 - src/traces/quiver/plot.js | 5 ++++- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/traces/quiver/attributes.js b/src/traces/quiver/attributes.js index a0e64eb74a9..0e2ef465a25 100644 --- a/src/traces/quiver/attributes.js +++ b/src/traces/quiver/attributes.js @@ -73,12 +73,6 @@ var attrs = { editType: 'calc', description: 'Angle of arrowhead in radians. Default = π/9' }, - scaleratio: { - valType: 'number', - min: 0, - editType: 'calc', - description: 'The ratio between the scale of the y-axis and the scale of the x-axis (scale_y / scale_x). Default = null, the scale ratio is not fixed.' - }, hoverdistance: { valType: 'number', min: -1, diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index 2d8e81554c1..eec5dae89ed 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -46,7 +46,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // back-compat coerce('arrow_scale'); coerce('angle', Math.PI / 9); - coerce('scaleratio'); coerce('hoverdistance', 20); // Line styling diff --git a/src/traces/quiver/plot.js b/src/traces/quiver/plot.js index c6fbe470371..82fc6bfb2ca 100644 --- a/src/traces/quiver/plot.js +++ b/src/traces/quiver/plot.js @@ -106,7 +106,10 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition } // Compute arrow in data space - var scaleRatio = trace.scaleratio || 1; + // Derive pixel-per-data scaling from axes at this point + var pxPerX = Math.abs(xa.c2p(cdi.x + 1) - xa.c2p(cdi.x)); + var pxPerY = Math.abs(ya.c2p(cdi.y + 1) - ya.c2p(cdi.y)); + var scaleRatio = (pxPerX && pxPerY) ? (pxPerY / pxPerX) : 1; var baseHeadScale = 0.2; var arrowScale = (trace.arrowsize !== undefined) ? (baseHeadScale * trace.arrowsize) From dec915a1b9f675ba605da8f3dbae4089d95b4a34 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 12:29:40 -0800 Subject: [PATCH 07/14] Remove angle attribute --- src/traces/quiver/attributes.js | 8 -------- src/traces/quiver/defaults.js | 1 - src/traces/quiver/plot.js | 9 ++++++--- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/traces/quiver/attributes.js b/src/traces/quiver/attributes.js index 0e2ef465a25..937e31bb0df 100644 --- a/src/traces/quiver/attributes.js +++ b/src/traces/quiver/attributes.js @@ -65,14 +65,6 @@ var attrs = { 'or *cm*/*center*/*middle* to center the arrow on (x,y).' ].join(' ') }, - angle: { - valType: 'number', - dflt: Math.PI / 9, - min: 0, - max: Math.PI / 2, - editType: 'calc', - description: 'Angle of arrowhead in radians. Default = π/9' - }, hoverdistance: { valType: 'number', min: -1, diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index eec5dae89ed..43d7a633ec4 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -45,7 +45,6 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('arrowsize', 1); // back-compat coerce('arrow_scale'); - coerce('angle', Math.PI / 9); coerce('hoverdistance', 20); // Line styling diff --git a/src/traces/quiver/plot.js b/src/traces/quiver/plot.js index 82fc6bfb2ca..c90ba980c87 100644 --- a/src/traces/quiver/plot.js +++ b/src/traces/quiver/plot.js @@ -114,7 +114,10 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition var arrowScale = (trace.arrowsize !== undefined) ? (baseHeadScale * trace.arrowsize) : (trace.arrow_scale !== undefined ? trace.arrow_scale : baseHeadScale); - var angle = trace.angle || Math.PI / 12; // small default + // Fixed arrowhead wedge angle (radians). + // Arrow direction is fully determined by u,v (see barbAng below); + // this constant only controls the opening of the head. + var headAngle = Math.PI / 12; var u = (trace.u && trace.u[cdi.i]) || 0; var v = (trace.v && trace.v[cdi.i]) || 0; @@ -138,8 +141,8 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition var arrowLen = barbLen * arrowScale; var barbAng = Math.atan2(dy, dx / scaleRatio); - var ang1 = barbAng + angle; - var ang2 = barbAng - angle; + var ang1 = barbAng + headAngle; + var ang2 = barbAng - headAngle; var x0, y0, x1, y1; if (anchor === 'tip') { From 507fb62a3b5e940cba915a6128f19ed98c7a32a9 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 12:37:42 -0800 Subject: [PATCH 08/14] Include colorscale attributes in quiver --- src/traces/quiver/attributes.js | 11 +++++++++++ src/traces/quiver/defaults.js | 23 +++++++++++++++++++++++ src/traces/quiver/plot.js | 12 ++++++++++++ 3 files changed, 46 insertions(+) diff --git a/src/traces/quiver/attributes.js b/src/traces/quiver/attributes.js index 937e31bb0df..15c85784745 100644 --- a/src/traces/quiver/attributes.js +++ b/src/traces/quiver/attributes.js @@ -6,6 +6,7 @@ var fontAttrs = require('../../plots/font_attributes'); var dash = require('../../components/drawing/attributes').dash; var extendFlat = require('../../lib/extend').extendFlat; +var colorScaleAttrs = require('../../components/colorscale/attributes'); var attrs = { x: { @@ -223,6 +224,16 @@ var attrs = { // Extend with base attributes (includes hoverinfo, etc.) extendFlat(attrs, baseAttrs); +// Colorscale attributes to color arrows by |(u,v)| magnitude +extendFlat( + attrs, + colorScaleAttrs('', { + colorAttr: 'u/v norm', + showScaleDflt: true, + editTypeOverride: 'calc' + }) +); + // Add hoverinfo with proper flags for quiver // We need to create a new object to avoid mutating the shared base attributes attrs.hoverinfo = extendFlat({}, baseAttrs.hoverinfo, { diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index 43d7a633ec4..54e243c8497 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -2,6 +2,9 @@ var Lib = require('../../lib'); var attributes = require('./attributes'); +var Colorscale = require('../../components/colorscale'); +var colorscaleDefaults = Colorscale.handleDefaults; +var hasColorscale = Colorscale.hasColorscale; module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout) { // Selection styling - use coerce to set proper defaults @@ -61,6 +64,26 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // traceOut.hoverinfo will be set by Lib.coerceHoverinfo in plots.js traceOut.hovertemplate = traceIn.hovertemplate; + // Colorscale for magnitude coloring: compute cmin/cmax from |(u,v)| + var cmin = Infinity; + var cmax = -Infinity; + for (var k = 0; k < len; k++) { + var uu = (traceOut.u && traceOut.u[k]) || (traceIn.u && traceIn.u[k]) || 0; + var vv = (traceOut.v && traceOut.v[k]) || (traceIn.v && traceIn.v[k]) || 0; + var nrm = Math.sqrt(uu * uu + vv * vv); + if (isFinite(nrm)) { + if (nrm < cmin) cmin = nrm; + if (nrm > cmax) cmax = nrm; + } + } + if (!isFinite(cmin)) cmin = 0; + if (!isFinite(cmax)) cmax = 1; + if (traceIn.cmin === undefined && traceOut.cmin === undefined) traceOut.cmin = cmin; + if (traceIn.cmax === undefined && traceOut.cmax === undefined) traceOut.cmax = cmax; + // Flag colorscale and apply defaults (adds colorscale, showscale, colorbar, etc.) + traceOut._hasColorscale = hasColorscale(traceIn) || true; + colorscaleDefaults(traceIn, traceOut, layout, coerce, { prefix: '', cLetter: 'c' }); + // Text traceOut.text = traceIn.text; traceOut.textposition = traceIn.textposition || 'middle center'; diff --git a/src/traces/quiver/plot.js b/src/traces/quiver/plot.js index c90ba980c87..b2be39b449a 100644 --- a/src/traces/quiver/plot.js +++ b/src/traces/quiver/plot.js @@ -5,6 +5,7 @@ var d3 = require('@plotly/d3'); var Registry = require('../../registry'); var Lib = require('../../lib'); var Drawing = require('../../components/drawing'); +var Colorscale = require('../../components/colorscale'); module.exports = function plot(gd, plotinfo, cdscatter, scatterLayer, transitionOpts, makeOnCompleteCallback) { var join, onComplete; @@ -184,6 +185,17 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition // Apply styling using Plotly's standard styling system Drawing.lineGroupStyle(lineSegments, trace.line && trace.line.width, trace.line && trace.line.color, trace.line && trace.line.dash); + // If colorscale present, color arrows by magnitude |(u,v)| + if (trace._hasColorscale) { + var colorFunc = Colorscale.makeColorScaleFuncFromTrace(trace); + lineSegments.style('stroke', function(cdi) { + var uVal = (trace.u && trace.u[cdi.i]) || 0; + var vVal = (trace.v && trace.v[cdi.i]) || 0; + var nVal = Math.sqrt(uVal * uVal + vVal * vVal); + return colorFunc(nVal); + }); + } + // Handle transitions if(transitionOpts && transitionOpts.duration > 0) { var transition = d3.transition() From 5a081e82aed8f8dbd51b76292726398ce1d9f78c Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 13:06:44 -0800 Subject: [PATCH 09/14] Add support for coloring by an independent scalar array --- src/traces/quiver/attributes.js | 7 +++++++ src/traces/quiver/calc.js | 32 ++++++++++++++++++++++++++++++++ src/traces/quiver/defaults.js | 19 ++----------------- src/traces/quiver/plot.js | 14 ++++++++++---- 4 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/traces/quiver/attributes.js b/src/traces/quiver/attributes.js index 15c85784745..88eb603a999 100644 --- a/src/traces/quiver/attributes.js +++ b/src/traces/quiver/attributes.js @@ -33,6 +33,13 @@ var attrs = { anim: true, description: 'Sets the y components of the arrow vectors.' }, + // Optional scalar field used for colorscale mapping. If omitted, |(u,v)| is used. + c: { + valType: 'data_array', + editType: 'calc', + anim: true, + description: 'Sets the scalar values used to map colors via the colorscale. If not provided, the magnitude sqrt(u^2 + v^2) is used.' + }, sizemode: { valType: 'enumerated', values: ['scaled', 'absolute', 'raw'], diff --git a/src/traces/quiver/calc.js b/src/traces/quiver/calc.js index 1fd8877bef7..4484de6960b 100644 --- a/src/traces/quiver/calc.js +++ b/src/traces/quiver/calc.js @@ -5,6 +5,7 @@ var Axes = require('../../plots/cartesian/axes'); var isNumeric = require('fast-isnumeric'); var BADNUM = require('../../constants/numerical').BADNUM; var scatterCalc = require('../scatter/calc'); +var colorscaleCalc = require('../../components/colorscale/calc'); /** * Main calculation function for quiver trace @@ -24,6 +25,12 @@ module.exports = function calc(gd, trace) { trace._length = len; var cd = new Array(len); + var normMin = Infinity; + var normMax = -Infinity; + var cMin = Infinity; + var cMax = -Infinity; + var hasC = Array.isArray(trace.c); + for(var i = 0; i < len; i++) { var cdi = cd[i] = { i: i }; var xValid = isNumeric(xVals[i]); @@ -36,11 +43,36 @@ module.exports = function calc(gd, trace) { cdi.x = BADNUM; cdi.y = BADNUM; } + + // track ranges for colorscale + if(hasC) { + var ci = trace.c[i]; + if(isNumeric(ci)) { + if(ci < cMin) cMin = ci; + if(ci > cMax) cMax = ci; + } + } else { + var ui = (trace.u && trace.u[i]) || 0; + var vi = (trace.v && trace.v[i]) || 0; + var n = Math.sqrt(ui * ui + vi * vi); + if(isFinite(n)) { + if(n < normMin) normMin = n; + if(n > normMax) normMax = n; + } + } } // Ensure axes are expanded and categories registered like scatter traces do scatterCalc.calcAxisExpansion(gd, trace, xa, ya, xVals, yVals); + // Colorscale cmin/cmax computation: prefer provided c, else magnitude + var vals = hasC ? [cMin, cMax] : [normMin, normMax]; + colorscaleCalc(gd, trace, { + vals: vals, + containerStr: '', + cLetter: 'c' + }); + return cd; }; diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index 54e243c8497..e03df991d97 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -64,23 +64,8 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // traceOut.hoverinfo will be set by Lib.coerceHoverinfo in plots.js traceOut.hovertemplate = traceIn.hovertemplate; - // Colorscale for magnitude coloring: compute cmin/cmax from |(u,v)| - var cmin = Infinity; - var cmax = -Infinity; - for (var k = 0; k < len; k++) { - var uu = (traceOut.u && traceOut.u[k]) || (traceIn.u && traceIn.u[k]) || 0; - var vv = (traceOut.v && traceOut.v[k]) || (traceIn.v && traceIn.v[k]) || 0; - var nrm = Math.sqrt(uu * uu + vv * vv); - if (isFinite(nrm)) { - if (nrm < cmin) cmin = nrm; - if (nrm > cmax) cmax = nrm; - } - } - if (!isFinite(cmin)) cmin = 0; - if (!isFinite(cmax)) cmax = 1; - if (traceIn.cmin === undefined && traceOut.cmin === undefined) traceOut.cmin = cmin; - if (traceIn.cmax === undefined && traceOut.cmax === undefined) traceOut.cmax = cmax; - // Flag colorscale and apply defaults (adds colorscale, showscale, colorbar, etc.) + // Colorscale defaults (adds colorscale, showscale, colorbar, etc.) + // Keep colorscale enabled by default for quiver traceOut._hasColorscale = hasColorscale(traceIn) || true; colorscaleDefaults(traceIn, traceOut, layout, coerce, { prefix: '', cLetter: 'c' }); diff --git a/src/traces/quiver/plot.js b/src/traces/quiver/plot.js index b2be39b449a..c092e0e40ed 100644 --- a/src/traces/quiver/plot.js +++ b/src/traces/quiver/plot.js @@ -189,10 +189,16 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition if (trace._hasColorscale) { var colorFunc = Colorscale.makeColorScaleFuncFromTrace(trace); lineSegments.style('stroke', function(cdi) { - var uVal = (trace.u && trace.u[cdi.i]) || 0; - var vVal = (trace.v && trace.v[cdi.i]) || 0; - var nVal = Math.sqrt(uVal * uVal + vVal * vVal); - return colorFunc(nVal); + var cArr = trace.c; + var value; + if (Array.isArray(cArr) && cArr.length > cdi.i && isFinite(cArr[cdi.i])) { + value = cArr[cdi.i]; + } else { + var uVal = (trace.u && trace.u[cdi.i]) || 0; + var vVal = (trace.v && trace.v[cdi.i]) || 0; + value = Math.sqrt(uVal * uVal + vVal * vVal); + } + return colorFunc(value); }); } From 4035d4de5d43ceb553d33b795abff85662942618 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 13:19:56 -0800 Subject: [PATCH 10/14] Run npm run schema --- test/plot-schema.json | 697 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 684 insertions(+), 13 deletions(-) diff --git a/test/plot-schema.json b/test/plot-schema.json index 26dbca17e17..103c2c0513e 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -17034,14 +17034,6 @@ "middle" ] }, - "angle": { - "description": "Angle of arrowhead in radians. Default = π/9", - "dflt": 0.3490658503988659, - "editType": "calc", - "max": 1.5707963267948966, - "min": 0, - "valType": "number" - }, "arrow_scale": { "description": "Deprecated alias for `arrowsize`-based sizing. Prefer using `arrowsize`.", "editType": "calc", @@ -17062,6 +17054,679 @@ "min": 0.1, "valType": "number" }, + "autocolorscale": { + "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "c": { + "anim": true, + "description": "Sets the scalar values used to map colors via the colorscale. If not provided, the magnitude sqrt(u^2 + v^2) is used.", + "editType": "calc", + "valType": "data_array" + }, + "cauto": { + "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v norm) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "cmax": { + "description": "Sets the upper bound of the color domain. Value should have the same units as u/v norm and if set, `cmin` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "cmid": { + "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as u/v norm. Has no effect when `cauto` is `false`.", + "dflt": null, + "editType": "calc", + "impliedEdits": {}, + "valType": "number" + }, + "cmin": { + "description": "Sets the lower bound of the color domain. Value should have the same units as u/v norm and if set, `cmax` must be set as well.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "cauto": false + }, + "valType": "number" + }, + "coloraxis": { + "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", + "dflt": null, + "editType": "calc", + "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", + "valType": "subplotid" + }, + "colorbar": { + "bgcolor": { + "description": "Sets the color of padded area.", + "dflt": "rgba(0,0,0,0)", + "editType": "colorbars", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) or the border enclosing this color bar.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "dtick": { + "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "editType": "colorbars", + "exponentformat": { + "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", + "dflt": "B", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "none", + "e", + "E", + "power", + "SI", + "B", + "SI extended" + ] + }, + "labelalias": { + "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", + "dflt": false, + "editType": "colorbars", + "valType": "any" + }, + "len": { + "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "lenmode": { + "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", + "dflt": "fraction", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "minexponent": { + "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", + "dflt": 3, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "nticks": { + "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", + "dflt": 0, + "editType": "colorbars", + "min": 0, + "valType": "integer" + }, + "orientation": { + "description": "Sets the orientation of the colorbar.", + "dflt": "v", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "h", + "v" + ] + }, + "outlinecolor": { + "description": "Sets the axis line color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "outlinewidth": { + "description": "Sets the width (in px) of the axis line.", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "role": "object", + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "colorbars", + "valType": "boolean" + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "thickness": { + "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", + "dflt": 30, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "thicknessmode": { + "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", + "dflt": "pixels", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "fraction", + "pixels" + ] + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "colorbars", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "colorbars", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "colorbars", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets the color bar's tick label font", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "colorbars", + "items": [ + { + "editType": "colorbars", + "valType": "any" + }, + { + "editType": "colorbars", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "colorbars", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "colorbars", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "colorbars", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "colorbars", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "colorbars", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", + "dflt": "outside", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "colorbars", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", + "editType": "colorbars", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "dflt": "", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "colorbars", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "colorbars", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "colorbars", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "colorbars", + "font": { + "color": { + "editType": "colorbars", + "valType": "color" + }, + "description": "Sets this color bar's title font.", + "editType": "colorbars", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "colorbars", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "colorbars", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "colorbars", + "valType": "string" + }, + "size": { + "editType": "colorbars", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "colorbars", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "side": { + "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "right", + "top", + "bottom" + ] + }, + "text": { + "description": "Sets the title of the color bar.", + "editType": "colorbars", + "valType": "string" + } + }, + "x": { + "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "xanchor": { + "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "left", + "center", + "right" + ] + }, + "xpad": { + "description": "Sets the amount of padding (in px) along the x direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "xref": { + "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + }, + "y": { + "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", + "editType": "colorbars", + "valType": "number" + }, + "yanchor": { + "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "top", + "middle", + "bottom" + ] + }, + "ypad": { + "description": "Sets the amount of padding (in px) along the y direction.", + "dflt": 10, + "editType": "colorbars", + "min": 0, + "valType": "number" + }, + "yref": { + "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", + "dflt": "paper", + "editType": "colorbars", + "valType": "enumerated", + "values": [ + "container", + "paper" + ] + } + }, + "colorscale": { + "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", + "dflt": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "csrc": { + "description": "Sets the source reference on Chart Studio Cloud for `c`.", + "editType": "none", + "valType": "string" + }, "customdata": { "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", "editType": "calc", @@ -17538,11 +18203,11 @@ "min": 0, "valType": "number" }, - "scaleratio": { - "description": "The ratio between the scale of the y-axis and the scale of the x-axis (scale_y / scale_x). Default = null, the scale ratio is not fixed.", - "editType": "calc", - "min": 0, - "valType": "number" + "reversescale": { + "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", + "dflt": false, + "editType": "plot", + "valType": "boolean" }, "selected": { "editType": "style", @@ -17583,6 +18248,12 @@ "editType": "style", "valType": "boolean" }, + "showscale": { + "description": "Determines whether or not a colorbar is displayed for this trace.", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, "sizemode": { "description": "Determines whether `sizeref` is set as a *scaled* (unitless) scalar (normalized by the max u/v norm in the vector field), as an *absolute* value (in the same units as the vector field), or *raw* to use the raw vector lengths.", "dflt": "scaled", From f09536f8f93509963123c2841f5de75c5852048e Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 18 Nov 2025 20:52:51 -0800 Subject: [PATCH 11/14] Use isArrayOrTypedArray --- src/traces/quiver/attributes.js | 2 -- src/traces/quiver/calc.js | 4 +--- src/traces/quiver/defaults.js | 11 +++++------ src/traces/quiver/event_data.js | 2 -- src/traces/quiver/format_labels.js | 25 +++++++++++++++++++++++++ src/traces/quiver/hover.js | 2 -- src/traces/quiver/index.js | 2 -- src/traces/quiver/plot.js | 4 +--- src/traces/quiver/select_points.js | 2 -- src/traces/quiver/style.js | 2 -- 10 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 src/traces/quiver/format_labels.js diff --git a/src/traces/quiver/attributes.js b/src/traces/quiver/attributes.js index 88eb603a999..966344561ca 100644 --- a/src/traces/quiver/attributes.js +++ b/src/traces/quiver/attributes.js @@ -254,5 +254,3 @@ attrs.hovertemplate = extendFlat({}, hovertemplateAttrs({}, { })); module.exports = attrs; - - diff --git a/src/traces/quiver/calc.js b/src/traces/quiver/calc.js index 4484de6960b..1bee1abefd9 100644 --- a/src/traces/quiver/calc.js +++ b/src/traces/quiver/calc.js @@ -29,7 +29,7 @@ module.exports = function calc(gd, trace) { var normMax = -Infinity; var cMin = Infinity; var cMax = -Infinity; - var hasC = Array.isArray(trace.c); + var hasC = Lib.isArrayOrTypedArray(trace.c); for(var i = 0; i < len; i++) { var cdi = cd[i] = { i: i }; @@ -75,5 +75,3 @@ module.exports = function calc(gd, trace) { return cd; }; - - diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index e03df991d97..b1766539c26 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -19,19 +19,20 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var v = coerce('v'); // Simple validation - check if we have the required arrays - if(!x || !Array.isArray(x) || x.length === 0 || - !y || !Array.isArray(y) || y.length === 0) { + // Use Lib.isArrayOrTypedArray to support both regular arrays and typed arrays + if(!x || !Lib.isArrayOrTypedArray(x) || x.length === 0 || + !y || !Lib.isArrayOrTypedArray(y) || y.length === 0) { traceOut.visible = false; return; } // If u/v are missing, default to zeros so the trace participates in calc/category logic var len = Math.min(x.length, y.length); - if(!Array.isArray(u) || u.length === 0) { + if(!Lib.isArrayOrTypedArray(u) || u.length === 0) { traceOut.u = new Array(len); for(var i = 0; i < len; i++) traceOut.u[i] = 0; } - if(!Array.isArray(v) || v.length === 0) { + if(!Lib.isArrayOrTypedArray(v) || v.length === 0) { traceOut.v = new Array(len); for(var j = 0; j < len; j++) traceOut.v[j] = 0; } @@ -86,5 +87,3 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // Set the data length traceOut._length = len; }; - - diff --git a/src/traces/quiver/event_data.js b/src/traces/quiver/event_data.js index c744a23a152..faecde95abb 100644 --- a/src/traces/quiver/event_data.js +++ b/src/traces/quiver/event_data.js @@ -8,5 +8,3 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { out.pointNumber = pointNumber; out.trace = trace; }; - - diff --git a/src/traces/quiver/format_labels.js b/src/traces/quiver/format_labels.js new file mode 100644 index 00000000000..8b56f67c2bf --- /dev/null +++ b/src/traces/quiver/format_labels.js @@ -0,0 +1,25 @@ +'use strict'; + +var Axes = require('../../plots/cartesian/axes'); + +module.exports = function formatLabels(cdi, trace, fullLayout) { + var labels = {}; + + var xa = Axes.getFromId({ _fullLayout: fullLayout }, trace.xaxis || 'x'); + var ya = Axes.getFromId({ _fullLayout: fullLayout }, trace.yaxis || 'y'); + + var x = cdi.x; + var y = cdi.y; + + labels.xLabel = Axes.tickText(xa, xa.c2l(x), true).text; + labels.yLabel = Axes.tickText(ya, ya.c2l(y), true).text; + + var u = trace.u ? trace.u[cdi.i] : 0; + var v = trace.v ? trace.v[cdi.i] : 0; + + // Format u and v as plain numbers + labels.uLabel = String(u); + labels.vLabel = String(v); + + return labels; +}; diff --git a/src/traces/quiver/hover.js b/src/traces/quiver/hover.js index d9a3d4573fb..21bfaccb68b 100644 --- a/src/traces/quiver/hover.js +++ b/src/traces/quiver/hover.js @@ -73,5 +73,3 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { return [hoverPoint]; }; - - diff --git a/src/traces/quiver/index.js b/src/traces/quiver/index.js index 82850f0840b..066d1e774f3 100644 --- a/src/traces/quiver/index.js +++ b/src/traces/quiver/index.js @@ -29,5 +29,3 @@ module.exports = { ].join(' ') } }; - - diff --git a/src/traces/quiver/plot.js b/src/traces/quiver/plot.js index c092e0e40ed..ee03ad0334c 100644 --- a/src/traces/quiver/plot.js +++ b/src/traces/quiver/plot.js @@ -191,7 +191,7 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition lineSegments.style('stroke', function(cdi) { var cArr = trace.c; var value; - if (Array.isArray(cArr) && cArr.length > cdi.i && isFinite(cArr[cdi.i])) { + if (Lib.isArrayOrTypedArray(cArr) && cArr.length > cdi.i && isFinite(cArr[cdi.i])) { value = cArr[cdi.i]; } else { var uVal = (trace.u && trace.u[cdi.i]) || 0; @@ -212,5 +212,3 @@ function plotOne(gd, idx, plotinfo, cdscatter, cdscatterAll, element, transition .style('opacity', 1); } } - - diff --git a/src/traces/quiver/select_points.js b/src/traces/quiver/select_points.js index d2dfa2d1dab..e169b1b9517 100644 --- a/src/traces/quiver/select_points.js +++ b/src/traces/quiver/select_points.js @@ -37,5 +37,3 @@ module.exports = function selectPoints(searchInfo, selectionTester) { return selection; }; - - diff --git a/src/traces/quiver/style.js b/src/traces/quiver/style.js index 30da22034c9..deb72e21718 100644 --- a/src/traces/quiver/style.js +++ b/src/traces/quiver/style.js @@ -14,5 +14,3 @@ module.exports = function style(gd, calcTrace) { s.selectAll('path.js-line') .call(Drawing.lineGroupStyle, trace.line || {}); }; - - From d4c2a1fdfdf4c18e0e9b5879108d089c8eab9ae1 Mon Sep 17 00:00:00 2001 From: John Degner Date: Mon, 17 Nov 2025 08:58:02 -0800 Subject: [PATCH 12/14] Add quiver jasmine and image tests --- src/traces/quiver/defaults.js | 3 + src/traces/quiver/event_data.js | 8 +- src/traces/quiver/hover.js | 105 +++--- src/traces/quiver/index.js | 1 + test/image/mocks/quiver_anchor.json | 92 +++++ test/image/mocks/quiver_arrow-styling.json | 66 ++++ test/image/mocks/quiver_categorical.json | 23 ++ test/image/mocks/quiver_colorscale.json | 32 ++ .../image/mocks/quiver_custom-colorscale.json | 39 +++ test/image/mocks/quiver_simple.json | 27 ++ test/image/mocks/quiver_sizemode.json | 92 +++++ test/image/mocks/quiver_wind.json | 53 +++ test/image/mocks/quiver_zero-vectors.json | 31 ++ test/jasmine/tests/quiver_test.js | 322 ++++++++++++++++++ 14 files changed, 832 insertions(+), 62 deletions(-) create mode 100644 test/image/mocks/quiver_anchor.json create mode 100644 test/image/mocks/quiver_arrow-styling.json create mode 100644 test/image/mocks/quiver_categorical.json create mode 100644 test/image/mocks/quiver_colorscale.json create mode 100644 test/image/mocks/quiver_custom-colorscale.json create mode 100644 test/image/mocks/quiver_simple.json create mode 100644 test/image/mocks/quiver_sizemode.json create mode 100644 test/image/mocks/quiver_wind.json create mode 100644 test/image/mocks/quiver_zero-vectors.json create mode 100644 test/jasmine/tests/quiver_test.js diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index b1766539c26..e7e5c0e86fd 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -17,6 +17,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout var y = coerce('y'); var u = coerce('u'); var v = coerce('v'); + + // Optional scalar field for colorscale + coerce('c'); // Simple validation - check if we have the required arrays // Use Lib.isArrayOrTypedArray to support both regular arrays and typed arrays diff --git a/src/traces/quiver/event_data.js b/src/traces/quiver/event_data.js index faecde95abb..bd8507a676c 100644 --- a/src/traces/quiver/event_data.js +++ b/src/traces/quiver/event_data.js @@ -3,8 +3,8 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) { out.x = pt.x; out.y = pt.y; - out.u = trace.u[pointNumber]; - out.v = trace.v[pointNumber]; - out.pointNumber = pointNumber; - out.trace = trace; + out.u = trace.u ? trace.u[pointNumber] : undefined; + out.v = trace.v ? trace.v[pointNumber] : undefined; + + return out; }; diff --git a/src/traces/quiver/hover.js b/src/traces/quiver/hover.js index 21bfaccb68b..41c7735f145 100644 --- a/src/traces/quiver/hover.js +++ b/src/traces/quiver/hover.js @@ -2,7 +2,7 @@ var Lib = require('../../lib'); var Fx = require('../../components/fx'); -var Registry = require('../../registry'); +var getTraceColor = require('../scatter/get_trace_color'); module.exports = function hoverPoints(pointData, xval, yval, hovermode) { var cd = pointData.cd; @@ -12,64 +12,53 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { var xpx = xa.c2p(xval); var ypx = ya.c2p(yval); - // Find the closest arrow base point to the hover point - var minDistance = Infinity; - var closestPoint = null; - var closestIndex = -1; - - // Each cd[i] is a calcdata point object with x/y - for(var i = 0; i < cd.length; i++) { - var cdi = cd[i]; - if(cdi.x === undefined || cdi.y === undefined) continue; - - var px = xa.c2p(cdi.x); - var py = ya.c2p(cdi.y); - - var distance = Math.sqrt((xpx - px) * (xpx - px) + (ypx - py) * (ypx - py)); - - if(distance < minDistance) { - minDistance = distance; - closestPoint = cdi; - closestIndex = i; - } - } - - var maxHoverDist = pointData.distance === Infinity ? Infinity : (trace.hoverdistance || 20); - if(!closestPoint || minDistance > maxHoverDist) return; - - // Create hover point data with proper label values and spikeline support - var hoverPoint = { - x: closestPoint.x, - y: closestPoint.y, - u: trace.u ? trace.u[closestIndex] : undefined, - v: trace.v ? trace.v[closestIndex] : undefined, - text: Array.isArray(trace.text) ? trace.text[closestIndex] : trace.text, - name: trace.name || '', - trace: trace, - index: closestIndex, - // Label values for formatting - xLabelVal: closestPoint.x, - yLabelVal: closestPoint.y, - uLabelVal: trace.u ? trace.u[closestIndex] : undefined, - vLabelVal: trace.v ? trace.v[closestIndex] : undefined, - // Spikeline support - xa: pointData.xa, - ya: pointData.ya, - x0: closestPoint.x, - x1: closestPoint.x, - y0: closestPoint.y, - y1: closestPoint.y, - distance: minDistance, - spikeDistance: minDistance, - curveNumber: trace.index, - color: trace.line ? trace.line.color : 'blue' + var distfn = function(di) { + var x = xa.c2p(di.x) - xpx; + var y = ya.c2p(di.y) - ypx; + return Math.max(Math.sqrt(x * x + y * y), 1 - 3 / Math.max(3, di.mrc || 0)); }; - // Set hover text - var hovertext = trace.hovertext || trace.text; - if(hovertext && hovertext[closestIndex]) { - hoverPoint.hovertext = hovertext[closestIndex]; - } + Fx.getClosest(cd, distfn, pointData); - return [hoverPoint]; + // skip if we didn't find a close point + if(pointData.index === false) return; + + // the closest data point + var di = cd[pointData.index]; + var xc = xa.c2p(di.x, true); + var yc = ya.c2p(di.y, true); + + // now we're done using the whole `calcdata` array, replace the + // index with the original index + pointData.index = di.i; + + var u = trace.u ? trace.u[di.i] : 0; + var v = trace.v ? trace.v[di.i] : 0; + + // Build extraText to show u and v values + var extraText = 'u: ' + u + ', v: ' + v; + + Lib.extendFlat(pointData, { + color: getTraceColor(trace, di), + + x0: xc - 3, + x1: xc + 3, + xLabelVal: di.x, + + y0: yc - 3, + y1: yc + 3, + yLabelVal: di.y, + + uLabelVal: u, + vLabelVal: v, + + extraText: extraText, + + spikeDistance: Math.sqrt((xpx - xc) * (xpx - xc) + (ypx - yc) * (ypx - yc)), + hovertemplate: trace.hovertemplate + }); + + Lib.fillText(di, trace, pointData); + + return [pointData]; }; diff --git a/src/traces/quiver/index.js b/src/traces/quiver/index.js index 066d1e774f3..4237fcf810a 100644 --- a/src/traces/quiver/index.js +++ b/src/traces/quiver/index.js @@ -15,6 +15,7 @@ module.exports = { style: require('./style'), styleOnSelect: require('../scatter/style').styleOnSelect, hoverPoints: require('./hover'), + formatLabels: require('./format_labels'), eventData: require('./event_data'), selectPoints: require('./select_points'), animatable: true, diff --git a/test/image/mocks/quiver_anchor.json b/test/image/mocks/quiver_anchor.json new file mode 100644 index 00000000000..dc0a157e889 --- /dev/null +++ b/test/image/mocks/quiver_anchor.json @@ -0,0 +1,92 @@ +{ + "data": [ + { + "type": "quiver", + "name": "tail anchor", + "x": [1, 1, 1], + "y": [0, 0, 0], + "u": [1, 0, -1], + "v": [1, 1, 1], + "sizemode": "scaled", + "sizeref": 0.5, + "anchor": "tail", + "line": { + "color": "red", + "width": 2 + }, + "showscale": false, + "xaxis": "x", + "yaxis": "y" + }, + { + "type": "quiver", + "name": "tip anchor", + "x": [1, 1, 1], + "y": [1, 1, 1], + "u": [1, 0, -1], + "v": [1, 1, 1], + "sizemode": "scaled", + "sizeref": 0.5, + "anchor": "tip", + "line": { + "color": "blue", + "width": 2 + }, + "showscale": false, + "xaxis": "x2", + "yaxis": "y2" + }, + { + "type": "quiver", + "name": "center anchor", + "x": [1, 1, 1], + "y": [2, 2, 2], + "u": [1, 0, -1], + "v": [1, 1, 1], + "sizemode": "scaled", + "sizeref": 0.5, + "anchor": "center", + "line": { + "color": "green", + "width": 2 + }, + "showscale": false, + "xaxis": "x3", + "yaxis": "y3" + } + ], + "layout": { + "width": 900, + "height": 400, + "showlegend": true, + "xaxis": { + "domain": [0, 0.3], + "range": [-0.5, 2.5], + "title": {"text": "tail anchor"} + }, + "yaxis": { + "domain": [0, 1], + "range": [-0.5, 1.5] + }, + "xaxis2": { + "domain": [0.35, 0.65], + "range": [-0.5, 2.5], + "title": {"text": "tip anchor"} + }, + "yaxis2": { + "domain": [0, 1], + "anchor": "x2", + "range": [0, 2] + }, + "xaxis3": { + "domain": [0.7, 1], + "range": [-0.5, 2.5], + "title": {"text": "center anchor"} + }, + "yaxis3": { + "domain": [0, 1], + "anchor": "x3", + "range": [1, 3] + } + } +} diff --git a/test/image/mocks/quiver_arrow-styling.json b/test/image/mocks/quiver_arrow-styling.json new file mode 100644 index 00000000000..d080d62515c --- /dev/null +++ b/test/image/mocks/quiver_arrow-styling.json @@ -0,0 +1,66 @@ +{ + "data": [ + { + "type": "quiver", + "name": "small arrows", + "x": [0, 1, 2], + "y": [0, 0, 0], + "u": [1, 1, 1], + "v": [1, 1, 1], + "sizemode": "scaled", + "sizeref": 0.5, + "arrowsize": 0.5, + "anchor": "tail", + "line": { + "color": "red", + "width": 1 + }, + "showscale": false + }, + { + "type": "quiver", + "name": "medium arrows", + "x": [0, 1, 2], + "y": [1, 1, 1], + "u": [1, 1, 1], + "v": [1, 1, 1], + "sizemode": "scaled", + "sizeref": 0.5, + "arrowsize": 1.0, + "anchor": "tail", + "line": { + "color": "blue", + "width": 2 + }, + "showscale": false + }, + { + "type": "quiver", + "name": "large arrows", + "x": [0, 1, 2], + "y": [2, 2, 2], + "u": [1, 1, 1], + "v": [1, 1, 1], + "sizemode": "scaled", + "sizeref": 0.5, + "arrowsize": 2.0, + "anchor": "tail", + "line": { + "color": "green", + "width": 3 + }, + "showscale": false + } + ], + "layout": { + "width": 500, + "height": 600, + "showlegend": true, + "xaxis": { + "range": [-0.5, 2.5] + }, + "yaxis": { + "range": [-0.5, 2.5] + } + } +} diff --git a/test/image/mocks/quiver_categorical.json b/test/image/mocks/quiver_categorical.json new file mode 100644 index 00000000000..776b03ccd3b --- /dev/null +++ b/test/image/mocks/quiver_categorical.json @@ -0,0 +1,23 @@ +{ + "data": [ + { + "type": "quiver", + "x": ["A", "B", "C", "A", "B", "C", "A", "B", "C"], + "y": ["X", "X", "X", "Y", "Y", "Y", "Z", "Z", "Z"], + "u": [1, 0, -1, 1, 0, -1, 1, 0, -1], + "v": [1, 1, 1, 0, 0, 0, -1, -1, -1], + "sizemode": "scaled", + "sizeref": 0.5, + "anchor": "tail", + "line": { + "width": 2 + }, + "showscale": false + } + ], + "layout": { + "title": {"text": "Quiver with Categorical Axes"}, + "width": 500, + "height": 500 + } +} diff --git a/test/image/mocks/quiver_colorscale.json b/test/image/mocks/quiver_colorscale.json new file mode 100644 index 00000000000..40987cc87c7 --- /dev/null +++ b/test/image/mocks/quiver_colorscale.json @@ -0,0 +1,32 @@ +{ + "data": [ + { + "type": "quiver", + "x": [0, 1, 2, 0, 1, 2, 0, 1, 2], + "y": [0, 0, 0, 1, 1, 1, 2, 2, 2], + "u": [1, 2, 3, 1, 2, 3, 1, 2, 3], + "v": [1, 1, 1, 2, 2, 2, 3, 3, 3], + "sizemode": "scaled", + "sizeref": 0.3, + "anchor": "tail", + "colorscale": "Viridis", + "showscale": true, + "line": { + "width": 2 + }, + "colorbar": { + "title": {"text": "Magnitude"} + } + } + ], + "layout": { + "width": 600, + "height": 500, + "xaxis": { + "range": [-0.5, 2.5] + }, + "yaxis": { + "range": [-0.5, 2.5] + } + } +} diff --git a/test/image/mocks/quiver_custom-colorscale.json b/test/image/mocks/quiver_custom-colorscale.json new file mode 100644 index 00000000000..5a29f3e315b --- /dev/null +++ b/test/image/mocks/quiver_custom-colorscale.json @@ -0,0 +1,39 @@ +{ + "data": [ + { + "type": "quiver", + "x": [0, 1, 2, 0, 1, 2, 0, 1, 2], + "y": [0, 0, 0, 1, 1, 1, 2, 2, 2], + "u": [0.5, 1.5, 2.5, 0.5, 1.5, 2.5, 0.5, 1.5, 2.5], + "v": [0.5, 0.5, 0.5, 1.5, 1.5, 1.5, 2.5, 2.5, 2.5], + "c": [1, 2, 3, 2, 3, 4, 3, 4, 5], + "sizemode": "scaled", + "sizeref": 0.25, + "anchor": "tail", + "colorscale": [ + [0, "rgb(0,0,255)"], + [0.5, "rgb(0,255,0)"], + [1, "rgb(255,0,0)"] + ], + "showscale": true, + "line": { + "width": 2 + }, + "colorbar": { + "title": {"text": "Custom Field"}, + "x": 1.02 + } + } + ], + "layout": { + "title": {"text": "Quiver with Custom Scalar Field (c)"}, + "width": 600, + "height": 500, + "xaxis": { + "range": [-0.5, 2.5] + }, + "yaxis": { + "range": [-0.5, 2.5] + } + } +} diff --git a/test/image/mocks/quiver_simple.json b/test/image/mocks/quiver_simple.json new file mode 100644 index 00000000000..3b9edbf5f78 --- /dev/null +++ b/test/image/mocks/quiver_simple.json @@ -0,0 +1,27 @@ +{ + "data": [ + { + "type": "quiver", + "x": [0, 1, 2, 0, 1, 2, 0, 1, 2], + "y": [0, 0, 0, 1, 1, 1, 2, 2, 2], + "u": [1, 0, -1, 1, 0, -1, 1, 0, -1], + "v": [0, 1, 0, 0, 1, 0, 0, 1, 0], + "sizemode": "scaled", + "sizeref": 0.5, + "anchor": "tail", + "line": { + "width": 2 + } + } + ], + "layout": { + "width": 500, + "height": 500, + "xaxis": { + "range": [-0.5, 2.5] + }, + "yaxis": { + "range": [-0.5, 2.5] + } + } +} diff --git a/test/image/mocks/quiver_sizemode.json b/test/image/mocks/quiver_sizemode.json new file mode 100644 index 00000000000..4a8ade18ebd --- /dev/null +++ b/test/image/mocks/quiver_sizemode.json @@ -0,0 +1,92 @@ +{ + "data": [ + { + "type": "quiver", + "name": "scaled", + "x": [0, 1, 2], + "y": [0, 0, 0], + "u": [1, 2, 3], + "v": [1, 1, 1], + "sizemode": "scaled", + "sizeref": 0.3, + "anchor": "tail", + "line": { + "color": "red", + "width": 2 + }, + "showscale": false, + "xaxis": "x", + "yaxis": "y" + }, + { + "type": "quiver", + "name": "absolute", + "x": [0, 1, 2], + "y": [1, 1, 1], + "u": [1, 2, 3], + "v": [1, 1, 1], + "sizemode": "absolute", + "sizeref": 0.3, + "anchor": "tail", + "line": { + "color": "blue", + "width": 2 + }, + "showscale": false, + "xaxis": "x2", + "yaxis": "y2" + }, + { + "type": "quiver", + "name": "raw", + "x": [0, 1, 2], + "y": [2, 2, 2], + "u": [0.3, 0.6, 0.9], + "v": [0.3, 0.3, 0.3], + "sizemode": "raw", + "sizeref": 1, + "anchor": "tail", + "line": { + "color": "green", + "width": 2 + }, + "showscale": false, + "xaxis": "x3", + "yaxis": "y3" + } + ], + "layout": { + "width": 800, + "height": 400, + "showlegend": true, + "xaxis": { + "domain": [0, 0.3], + "range": [-0.5, 2.5], + "title": {"text": "scaled"} + }, + "yaxis": { + "domain": [0, 1], + "range": [-0.5, 0.5] + }, + "xaxis2": { + "domain": [0.35, 0.65], + "range": [-0.5, 2.5], + "title": {"text": "absolute"} + }, + "yaxis2": { + "domain": [0, 1], + "anchor": "x2", + "range": [0.5, 1.5] + }, + "xaxis3": { + "domain": [0.7, 1], + "range": [-0.5, 2.5], + "title": {"text": "raw"} + }, + "yaxis3": { + "domain": [0, 1], + "anchor": "x3", + "range": [1.5, 2.5] + } + } +} diff --git a/test/image/mocks/quiver_wind.json b/test/image/mocks/quiver_wind.json new file mode 100644 index 00000000000..9ae94159d0e --- /dev/null +++ b/test/image/mocks/quiver_wind.json @@ -0,0 +1,53 @@ +{ + "data": [ + { + "type": "quiver", + "name": "Wind field", + "x": [0, 0.5, 1, 1.5, 2, 2.5, 3, + 0, 0.5, 1, 1.5, 2, 2.5, 3, + 0, 0.5, 1, 1.5, 2, 2.5, 3, + 0, 0.5, 1, 1.5, 2, 2.5, 3, + 0, 0.5, 1, 1.5, 2, 2.5, 3], + "y": [0, 0, 0, 0, 0, 0, 0, + 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, + 1, 1, 1, 1, 1, 1, 1, + 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, + 2, 2, 2, 2, 2, 2, 2], + "u": [1, 1.5, 2, 2.5, 3, 2.5, 2, + 0.8, 1.2, 1.8, 2.2, 2.8, 2.2, 1.8, + 0.5, 1, 1.5, 2, 2.5, 2, 1.5, + 0.3, 0.8, 1.2, 1.8, 2.2, 1.8, 1.2, + 0.1, 0.5, 1, 1.5, 2, 1.5, 1], + "v": [0.2, 0.3, 0.5, 0.8, 1, 0.8, 0.5, + 0.5, 0.8, 1, 1.2, 1.5, 1.2, 1, + 0.8, 1.2, 1.5, 1.8, 2, 1.8, 1.5, + 0.5, 0.8, 1.2, 1.5, 1.8, 1.5, 1.2, + 0.2, 0.5, 0.8, 1.2, 1.5, 1.2, 0.8], + "sizemode": "scaled", + "sizeref": 0.2, + "anchor": "center", + "colorscale": "Jet", + "showscale": true, + "line": { + "width": 1.5 + }, + "colorbar": { + "title": {"text": "Speed"}, + "x": 1.02 + } + } + ], + "layout": { + "title": {"text": "Vector Wind Field Visualization"}, + "width": 700, + "height": 600, + "xaxis": { + "title": {"text": "X"}, + "range": [-0.2, 3.2] + }, + "yaxis": { + "title": {"text": "Y"}, + "range": [-0.2, 2.2] + } + } +} diff --git a/test/image/mocks/quiver_zero-vectors.json b/test/image/mocks/quiver_zero-vectors.json new file mode 100644 index 00000000000..aeb8760aeb2 --- /dev/null +++ b/test/image/mocks/quiver_zero-vectors.json @@ -0,0 +1,31 @@ +{ + "data": [ + { + "type": "quiver", + "name": "Mixed vectors", + "x": [0, 1, 2, 3, 4], + "y": [1, 1, 1, 1, 1], + "u": [1, 0, 0, 1, 2], + "v": [1, 0, 0, 1, 2], + "sizemode": "scaled", + "sizeref": 0.5, + "anchor": "tail", + "line": { + "color": "purple", + "width": 2 + }, + "showscale": false + } + ], + "layout": { + "title": {"text": "Quiver with Zero-Length Vectors"}, + "width": 600, + "height": 400, + "xaxis": { + "range": [-0.5, 4.5] + }, + "yaxis": { + "range": [0, 2] + } + } +} diff --git a/test/jasmine/tests/quiver_test.js b/test/jasmine/tests/quiver_test.js new file mode 100644 index 00000000000..377e34db6c4 --- /dev/null +++ b/test/jasmine/tests/quiver_test.js @@ -0,0 +1,322 @@ +var Plotly = require('../../../lib/index'); +var Lib = require('../../../src/lib'); +var d3Select = require('../../strict-d3').select; + +var supplyAllDefaults = require('../assets/supply_defaults'); +var createGraphDiv = require('../assets/create_graph_div'); +var destroyGraphDiv = require('../assets/destroy_graph_div'); + +var delay = require('../assets/delay'); +var mouseEvent = require('../assets/mouse_event'); + +var customAssertions = require('../assets/custom_assertions'); +var assertHoverLabelContent = customAssertions.assertHoverLabelContent; + +describe('Test quiver defaults', function() { + var gd; + + function makeGD() { + return { + data: [{ + type: 'quiver', + x: [1, 2], + y: [1, 2], + u: [1, 2], + v: [1, 2] + }], + layout: {} + }; + } + + it('should not set `visible: false` for traces with x,y arrays', function() { + gd = makeGD(); + supplyAllDefaults(gd); + expect(gd._fullData[0].visible).toBe(true); + }); + + it('should set `visible: false` for traces missing x or y arrays', function() { + var keysToDelete = ['x', 'y']; + + keysToDelete.forEach(function(k) { + gd = makeGD(); + delete gd.data[0][k]; + + supplyAllDefaults(gd); + expect(gd._fullData[0].visible).toBe(false, 'missing array ' + k); + }); + }); + + it('should set `visible: false` for traces with empty x or y arrays', function() { + var keysToEmpty = ['x', 'y']; + + keysToEmpty.forEach(function(k) { + gd = makeGD(); + gd.data[0][k] = []; + + supplyAllDefaults(gd); + expect(gd._fullData[0].visible).toBe(false, 'empty array ' + k); + }); + }); + + it('should default u,v to zeros when missing', function() { + gd = { + data: [{ + type: 'quiver', + x: [1, 2, 3], + y: [1, 2, 3] + }], + layout: {} + }; + + supplyAllDefaults(gd); + expect(gd._fullData[0].visible).toBe(true); + expect(gd._fullData[0].u).toEqual([0, 0, 0]); + expect(gd._fullData[0].v).toEqual([0, 0, 0]); + }); + + it('should default u,v to zeros when empty', function() { + gd = { + data: [{ + type: 'quiver', + x: [1, 2, 3], + y: [1, 2, 3], + u: [], + v: [] + }], + layout: {} + }; + + supplyAllDefaults(gd); + expect(gd._fullData[0].visible).toBe(true); + expect(gd._fullData[0].u).toEqual([0, 0, 0]); + expect(gd._fullData[0].v).toEqual([0, 0, 0]); + }); + + it('should set sizemode and sizeref defaults correctly', function() { + gd = makeGD(); + supplyAllDefaults(gd); + expect(gd._fullData[0].sizemode).toBe('scaled'); + expect(gd._fullData[0].sizeref).toBe(0.5); + }); + + it('should set sizeref to 1 when sizemode is raw', function() { + gd = makeGD(); + gd.data[0].sizemode = 'raw'; + supplyAllDefaults(gd); + expect(gd._fullData[0].sizemode).toBe('raw'); + expect(gd._fullData[0].sizeref).toBe(1); + }); + + it('should set anchor default to tail', function() { + gd = makeGD(); + supplyAllDefaults(gd); + expect(gd._fullData[0].anchor).toBe('tail'); + }); +}); + +describe('Test quiver calc', function() { + var gd; + + beforeEach(function() { + gd = createGraphDiv(); + }); + + afterEach(function() { + Plotly.purge(gd); + destroyGraphDiv(); + }); + + it('should calculate data correctly for simple vectors', function(done) { + Plotly.newPlot(gd, [{ + type: 'quiver', + x: [0, 1, 2], + y: [0, 1, 2], + u: [1, 0, -1], + v: [0, 1, 0] + }]).then(function() { + var calcData = gd.calcdata[0]; + expect(calcData.length).toBe(3); + expect(calcData[0].x).toBe(0); + expect(calcData[0].y).toBe(0); + expect(calcData[1].x).toBe(1); + expect(calcData[1].y).toBe(1); + expect(calcData[2].x).toBe(2); + expect(calcData[2].y).toBe(2); + }) + .then(done, done.fail); + }); +}); + +describe('Test quiver interactions', function() { + var gd; + + beforeEach(function() { + gd = createGraphDiv(); + }); + + afterEach(function() { + Plotly.purge(gd); + destroyGraphDiv(); + }); + + it('should add/clear svg objects correctly', function(done) { + Plotly.newPlot(gd, [{ + type: 'quiver', + x: [1, 2], + y: [1, 2], + u: [1, 0], + v: [0, 1] + }, { + type: 'quiver', + x: [3, 4], + y: [3, 4], + u: [1, 1], + v: [1, 1] + }]).then(function() { + var quiverLayers = gd._fullLayout._plots.xy.plot.selectAll('.trace.quiver'); + expect(quiverLayers.size()).toBe(2); + + return Plotly.deleteTraces(gd, [0]); + }) + .then(function() { + var quiverLayers = gd._fullLayout._plots.xy.plot.selectAll('.trace.quiver'); + expect(quiverLayers.size()).toBe(1); + + return Plotly.deleteTraces(gd, [0]); + }) + .then(function() { + var quiverLayers = gd._fullLayout._plots.xy.plot.selectAll('.trace.quiver'); + expect(quiverLayers.size()).toBe(0); + }) + .then(done, done.fail); + }); + + it('should restyle arrow properties', function(done) { + Plotly.newPlot(gd, [{ + type: 'quiver', + x: [1, 2], + y: [1, 2], + u: [1, 0], + v: [0, 1], + sizeref: 0.5 + }]).then(function() { + expect(gd._fullData[0].sizeref).toBe(0.5); + return Plotly.restyle(gd, 'sizeref', 1.5); + }) + .then(function() { + expect(gd._fullData[0].sizeref).toBe(1.5); + return Plotly.restyle(gd, 'anchor', 'tip'); + }) + .then(function() { + expect(gd._fullData[0].anchor).toBe('tip'); + }) + .then(done, done.fail); + }); + + it('should display hover labels', function(done) { + var fig = { + data: [{ + type: 'quiver', + x: [1, 2, 3], + y: [1, 2, 3], + u: [1, 0, -1], + v: [0, 1, 0], + showscale: false + }], + layout: { + margin: {l: 0, t: 0, r: 0, b: 0}, + width: 400, + height: 400 + } + }; + + Plotly.newPlot(gd, fig) + .then(function() { + mouseEvent('mousemove', 200, 200); + }) + .then(delay(20)) + .then(function() { + assertHoverLabelContent({ + nums: '(2, 2)\nu: 0, v: 1' + }); + }) + .then(done, done.fail); + }); + + it('should render multiple quiver traces', function(done) { + Plotly.newPlot(gd, [{ + type: 'quiver', + name: 'trace A', + x: [1, 2], + y: [1, 2], + u: [1, 0], + v: [0, 1], + line: {color: 'red'}, + showscale: false + }, { + type: 'quiver', + name: 'trace B', + x: [3, 4], + y: [3, 4], + u: [-1, 0], + v: [0, -1], + line: {color: 'blue'}, + showscale: false + }], { + margin: {l: 0, t: 0, r: 0, b: 0}, + width: 400, + height: 400 + }) + .then(function() { + var quiverLayers = gd._fullLayout._plots.xy.plot.selectAll('.trace.quiver'); + expect(quiverLayers.size()).toBe(2); + }) + .then(done, done.fail); + }); + + it('should handle sizemode changes', function(done) { + Plotly.newPlot(gd, [{ + type: 'quiver', + x: [0, 1, 2], + y: [0, 1, 2], + u: [1, 2, 3], + v: [1, 2, 3], + sizemode: 'scaled', + sizeref: 0.5 + }]).then(function() { + expect(gd._fullData[0].sizemode).toBe('scaled'); + return Plotly.restyle(gd, 'sizemode', 'absolute'); + }) + .then(function() { + expect(gd._fullData[0].sizemode).toBe('absolute'); + return Plotly.restyle(gd, 'sizemode', 'raw'); + }) + .then(function() { + expect(gd._fullData[0].sizemode).toBe('raw'); + }) + .then(done, done.fail); + }); + + it('should handle anchor changes', function(done) { + Plotly.newPlot(gd, [{ + type: 'quiver', + x: [1, 2], + y: [1, 2], + u: [1, 1], + v: [1, 1], + anchor: 'tail' + }]).then(function() { + expect(gd._fullData[0].anchor).toBe('tail'); + return Plotly.restyle(gd, 'anchor', 'tip'); + }) + .then(function() { + expect(gd._fullData[0].anchor).toBe('tip'); + return Plotly.restyle(gd, 'anchor', 'center'); + }) + .then(function() { + expect(gd._fullData[0].anchor).toBe('center'); + }) + .then(done, done.fail); + }); +}); + From a008dabf2b0f8cbd52d85c730faada3f9b897dcc Mon Sep 17 00:00:00 2001 From: John Degner Date: Mon, 17 Nov 2025 10:50:04 -0800 Subject: [PATCH 13/14] Generate baseline images for quiver tests --- test/image/baselines/quiver_anchor.png | Bin 0 -> 26453 bytes test/image/baselines/quiver_arrow-styling.png | Bin 0 -> 22306 bytes test/image/baselines/quiver_categorical.png | Bin 0 -> 14784 bytes test/image/baselines/quiver_colorscale.png | Bin 0 -> 17292 bytes .../baselines/quiver_custom-colorscale.png | Bin 0 -> 21053 bytes test/image/baselines/quiver_simple.png | Bin 0 -> 13934 bytes test/image/baselines/quiver_sizemode.png | Bin 0 -> 28492 bytes test/image/baselines/quiver_wind.png | Bin 0 -> 32997 bytes test/image/baselines/quiver_zero-vectors.png | Bin 0 -> 14882 bytes .../treemap_sunburst_marker_colors.png | Bin 276815 -> 276821 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/quiver_anchor.png create mode 100644 test/image/baselines/quiver_arrow-styling.png create mode 100644 test/image/baselines/quiver_categorical.png create mode 100644 test/image/baselines/quiver_colorscale.png create mode 100644 test/image/baselines/quiver_custom-colorscale.png create mode 100644 test/image/baselines/quiver_simple.png create mode 100644 test/image/baselines/quiver_sizemode.png create mode 100644 test/image/baselines/quiver_wind.png create mode 100644 test/image/baselines/quiver_zero-vectors.png diff --git a/test/image/baselines/quiver_anchor.png b/test/image/baselines/quiver_anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..463f0fb85dfaf6f6b16f0edc8dba648db3e7567d GIT binary patch literal 26453 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/quiver_arrow-styling.png b/test/image/baselines/quiver_arrow-styling.png new file mode 100644 index 0000000000000000000000000000000000000000..d6fe39cceb5344f9f2e41d921f097468789f2f3e GIT binary patch literal 22306 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 ip$qxHREOoIm$|cinZryZFIcA@BR{UAuO@ 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/quiver_simple.png b/test/image/baselines/quiver_simple.png new file mode 100644 index 0000000000000000000000000000000000000000..fb0a7e451f9db87f045c4e133b48f50821218847 GIT binary patch literal 13934 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/quiver_sizemode.png b/test/image/baselines/quiver_sizemode.png new file mode 100644 index 0000000000000000000000000000000000000000..b914c5129b97027134f23a773feb0ec0072e9bed GIT binary patch literal 28492 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 X75!SQl}aelf{&-WH(9u0_p$#15aZD> literal 0 HcmV?d00001 diff --git a/test/image/baselines/quiver_wind.png b/test/image/baselines/quiver_wind.png new file mode 100644 index 0000000000000000000000000000000000000000..3e799eb8a8b87092332e0fc1566b6cf6db7966e4 GIT binary patch literal 32997 zcmeFadstH0|2C|dI%BC*O<5jt%IWARm3dB?rkR{Fv!kY@Xqu#gm?okqXr@k?+EFW0 zYs^j_P*F$$@sL@0AT>om0W(Dd1SLS_^z6RJd4JFE`#kUUT<>+ge?0x+b;)M$wLfd^ zwb%Nrd)@cV_x_{Ck@&i(v->*b|led>~LA8h>Y#|InHdsps_*!07L zjlZ8+dKA3rkEbp_$Nu~se(85-Z|(TiV1?VYYZsCihcGvyp4*NFJ<%d>a89b<2il7r zVg4ei@MbUGx7h9Elu#(#z5e?LI{I6G)-^hkw&eS#eM|IPAZ4~)F-L(<|M((YUk7Bk z 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�E2DfB+hma`Jbm9Pi@lL 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

iZRV*Fxu7L?)S1oxrA~lHfGEiCOZr= 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/treemap_sunburst_marker_colors.png b/test/image/baselines/treemap_sunburst_marker_colors.png index beebd418791d7e166b7d82a028ad1178ebacc08a..209427c1b2a359b6d0c5b2904a97782d525ea0a8 100644 GIT binary patch literal 276821 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%0AuuXQ6sw%e0DfGJ|tQ-HeQLKz_6EH>O`}-Ug>0 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
9w#4o5u3OL{N!Jk30 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%0AX-? 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 Z0kw*gF{ZSuD~byIgK6n&R%qBp{U5E Date: Sat, 29 Nov 2025 18:32:56 -0800 Subject: [PATCH 14/14] Run npm run schema --- test/plot-schema.json | 17882 ++-------------------------------------- 1 file changed, 876 insertions(+), 17006 deletions(-) diff --git a/test/plot-schema.json b/test/plot-schema.json index 103c2c0513e..57987a0cd93 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -14117,17024 +14117,894 @@ "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes.", "dflt": "normal", "editType": "plot", -<<<<<<< HEAD "valType": "enumerated", "values": [ "normal", "tozero", "nonnegative" -======= - "valType": "any" - }, - { - "editType": "plot", - "valType": "any" - } - ], - "valType": "info_array" - }, - "description": "The dimensions (variables) of the parallel coordinates chart. 2..60 dimensions are supported.", - "editType": "calc", - "label": { - "description": "The shown name of the dimension.", - "editType": "plot", - "valType": "string" - }, - "multiselect": { - "description": "Do we allow multiple selection ranges or just a single range?", - "dflt": true, - "editType": "plot", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "none", - "valType": "string" - }, - "range": { - "description": "The domain range that represents the full, shown axis extent. Defaults to the `values` extent. Must be an array of `[fromValue, toValue]` with finite numbers as elements.", - "editType": "plot", - "items": [ - { - "editType": "plot", - "valType": "number" - }, - { - "editType": "plot", - "valType": "number" - } - ], - "valType": "info_array" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`.", - "editType": "plot", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear.", - "editType": "plot", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "values": { - "description": "Dimension values. `values[n]` represents the value of the `n`th point in the dataset, therefore the `values` vector for all dimensions must be the same (longer vectors will be truncated). Each value must be a finite number.", - "editType": "calc", - "valType": "data_array" - }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, - "visible": { - "description": "Shows the dimension when set to `true` (the default). Hides the dimension for `false`.", - "dflt": true, - "editType": "plot", - "valType": "boolean" - } - } - }, - "role": "object" - }, - "domain": { - "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this parcoords trace .", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "integer" - }, - "editType": "plot", - "role": "object", - "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this parcoords trace .", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "integer" - }, - "x": { - "description": "Sets the horizontal domain of this parcoords trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "plot", - "items": [ - { - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array" - }, - "y": { - "description": "Sets the vertical domain of this parcoords trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "plot", - "items": [ - { - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array" - } - }, - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "labelangle": { - "description": "Sets the angle of the labels with respect to the horizontal. For example, a `tickangle` of -90 draws the labels vertically. Tilted labels with *labelangle* may be positioned better inside margins when `labelposition` is set to *bottom*.", - "dflt": 0, - "editType": "plot", - "valType": "angle" - }, - "labelfont": { - "color": { - "editType": "plot", - "valType": "color" - }, - "description": "Sets the font for the `dimension` labels.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "labelside": { - "description": "Specifies the location of the `label`. *top* positions labels above, next to the title *bottom* positions labels below the graph Tilted labels with *labelangle* may be positioned better inside margins when `labelposition` is set to *bottom*.", - "dflt": "top", - "editType": "plot", - "valType": "enumerated", - "values": [ - "top", - "bottom" - ] - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `line.colorscale`. Has an effect only if in `line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": false, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `line.color`) or the bounds set in `line.cmin` and `line.cmax` Has an effect only if in `line.color` is set to a numerical array. Defaults to `false` when `line.cmin` and `line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color` and if set, `line.cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `line.cmin` and/or `line.cmax` to be equidistant to this point. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color`. Has no effect when `line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `line.color` is set to a numerical array. Value should have the same units as in `line.color` and if set, `line.cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `line.cmin` and `line.cmax` if set.", - "editType": "calc", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] + ] }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `line.cmin` and `line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": [ - [ - 0, - "#440154" - ], - [ - 0.06274509803921569, - "#48186a" - ], - [ - 0.12549019607843137, - "#472d7b" - ], - [ - 0.18823529411764706, - "#424086" - ], - [ - 0.25098039215686274, - "#3b528b" - ], - [ - 0.3137254901960784, - "#33638d" - ], - [ - 0.3764705882352941, - "#2c728e" - ], - [ - 0.4392156862745098, - "#26828e" - ], - [ - 0.5019607843137255, - "#21918c" - ], - [ - 0.5647058823529412, - "#1fa088" - ], - [ - 0.6274509803921569, - "#28ae80" - ], - [ - 0.6901960784313725, - "#3fbc73" - ], - [ - 0.7529411764705882, - "#5ec962" - ], - [ - 0.8156862745098039, - "#84d44b" - ], - [ - 0.8784313725490196, - "#addc30" - ], - [ - 0.9411764705882353, - "#d8e219" - ], - [ - 1, - "#fde725" - ] - ], - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `line.color` is set to a numerical array. If true, `line.cmin` will correspond to the last color in the array and `line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `line.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "rangefont": { - "color": { - "editType": "plot", - "valType": "color" - }, - "description": "Sets the font for the `dimension` range values.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "tickfont": { - "color": { - "editType": "plot", - "valType": "color" - }, - "description": "Sets the font for the `dimension` tick values.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "auto", - "editType": "plot", - "valType": "string" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "type": "parcoords", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "plot", - "line": { - "color": { - "description": "Sets the base color of unselected lines. in connection with `unselected.line.opacity`.", - "dflt": "#7f7f7f", - "editType": "plot", - "valType": "color" - }, - "editType": "plot", - "opacity": { - "description": "Sets the opacity of unselected lines. The default *auto* decreases the opacity smoothly as the number of lines increases. Use *1* to achieve exact `unselected.line.color`.", - "dflt": "auto", - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object" - }, - "role": "object" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "gl", - "regl", - "noOpacity", - "noHover" - ], - "meta": { - "description": "Parallel coordinates for multidimensional exploratory data analysis. The samples are specified in `dimensions`. The colors are set in `line.color`." - }, - "type": "parcoords" - }, - "pie": { - "animatable": false, - "attributes": { - "automargin": { - "description": "Determines whether outside text labels can push the margins.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "direction": { - "description": "Specifies the direction at which succeeding sectors follow one another.", - "dflt": "counterclockwise", - "editType": "calc", - "valType": "enumerated", - "values": [ - "clockwise", - "counterclockwise" - ] - }, - "dlabel": { - "description": "Sets the label step. See `label0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "domain": { - "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this pie trace .", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "editType": "calc", - "role": "object", - "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this pie trace .", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "x": { - "description": "Sets the horizontal domain of this pie trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array" - }, - "y": { - "description": "Sets the vertical domain of this pie trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array" - } - }, - "hole": { - "description": "Sets the fraction of the radius to cut out of the pie. Use this to make a donut chart.", - "dflt": 0, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "label", - "text", - "value", - "percent", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `percent` and `text`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "insidetextfont": { - "color": { - "arrayOk": true, - "editType": "plot", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used for `textinfo` lying inside the sector.", - "editType": "plot", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "plot", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "insidetextorientation": { - "description": "Controls the orientation of the text inside chart sectors. When set to *auto*, text may be oriented in any direction in order to be as big as possible in the middle of a sector. The *horizontal* option orients text to be parallel with the bottom of the chart, and may make text smaller in order to achieve that goal. The *radial* option orients text along the radius of the sector. The *tangential* option orients text perpendicular to the radius of the sector.", - "dflt": "auto", - "editType": "plot", - "valType": "enumerated", - "values": [ - "horizontal", - "radial", - "tangential", - "auto" - ] - }, - "label0": { - "description": "Alternate to `labels`. Builds a numeric set of labels. Use with `dlabel` where `label0` is the starting label and `dlabel` the step.", - "dflt": 0, - "editType": "calc", - "valType": "number" - }, - "labels": { - "description": "Sets the sector labels. If `labels` entries are duplicated, we sum associated `values` or simply count occurrences if `values` is not provided. For other array attributes (including color) we use the first non-empty entry among all occurrences of the label.", - "editType": "calc", - "valType": "data_array" - }, - "labelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `labels`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "marker": { - "colors": { - "description": "Sets the color of each sector. If not specified, the default trace color set is used to pick the sector colors.", - "editType": "calc", - "valType": "data_array" - }, - "colorssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `colors`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "line": { - "color": { - "arrayOk": true, - "description": "Sets the color of the line enclosing each sector.", - "dflt": "#444", - "editType": "style", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the line enclosing each sector.", - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "number" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - } - }, - "pattern": { - "bgcolor": { - "arrayOk": true, - "description": "When there is no colorscale sets the color of background pattern fill. Defaults to a `marker.color` background when `fillmode` is *overlay*. Otherwise, defaults to a transparent background.", - "editType": "style", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the pattern within the marker.", - "editType": "style", - "fgcolor": { - "arrayOk": true, - "description": "When there is no colorscale sets the color of foreground pattern fill. Defaults to a `marker.color` background when `fillmode` is *replace*. Otherwise, defaults to dark grey or white to increase contrast with the `bgcolor`.", - "editType": "style", - "valType": "color" - }, - "fgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `fgcolor`.", - "editType": "none", - "valType": "string" - }, - "fgopacity": { - "description": "Sets the opacity of the foreground pattern fill. Defaults to a 0.5 when `fillmode` is *overlay*. Otherwise, defaults to 1.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "fillmode": { - "description": "Determines whether `marker.color` should be used as a default to `bgcolor` or a `fgcolor`.", - "dflt": "replace", - "editType": "style", - "valType": "enumerated", - "values": [ - "replace", - "overlay" - ] - }, - "path": { - "arrayOk": true, - "description": "Sets a custom path for pattern fill. Use with no `shape` or `solidity`, provide an SVG path string for the regions of the square from (0,0) to (`size`,`size`) to color.", - "editType": "style", - "valType": "string" - }, - "pathsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `path`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shape": { - "arrayOk": true, - "description": "Sets the shape of the pattern fill. By default, no pattern is used for filling the area.", - "dflt": "", - "editType": "style", - "valType": "enumerated", - "values": [ - "", - "/", - "\\", - "x", - "-", - "|", - "+", - "." - ] - }, - "shapesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shape`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "description": "Sets the size of unit squares of the pattern fill in pixels, which corresponds to the interval of repetition of the pattern.", - "dflt": 8, - "editType": "style", - "min": 0, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "solidity": { - "arrayOk": true, - "description": "Sets the solidity of the pattern fill. Solidity is roughly the fraction of the area filled by the pattern. Solidity of 0 shows only the background color without pattern and solidty of 1 shows only the foreground color without pattern.", - "dflt": 0.3, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - } - }, - "role": "object" - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "outsidetextfont": { - "color": { - "arrayOk": true, - "editType": "plot", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used for `textinfo` lying outside the sector.", - "editType": "plot", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "plot", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "pull": { - "arrayOk": true, - "description": "Sets the fraction of larger radius to pull the sectors out from the center. This can be a constant to pull all slices apart from each other equally or an array to highlight one or more slices.", - "dflt": 0, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "pullsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `pull`.", - "editType": "none", - "valType": "string" - }, - "rotation": { - "description": "Instead of the first slice starting at 12 o'clock, rotate to some other angle.", - "dflt": 0, - "editType": "calc", - "valType": "angle" - }, - "scalegroup": { - "description": "If there are multiple pie charts that should be sized according to their totals, link them by providing a non-empty group id here shared by every trace in the same group.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "sort": { - "description": "Determines whether or not the sectors are reordered from largest to smallest.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "text": { - "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "editType": "plot", - "valType": "data_array" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "plot", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used for `textinfo`.", - "editType": "plot", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "plot", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "textinfo": { - "description": "Determines which trace information appear on the graph.", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "label", - "text", - "value", - "percent" - ], - "valType": "flaglist" - }, - "textposition": { - "arrayOk": true, - "description": "Specifies the location of the `textinfo`.", - "dflt": "auto", - "editType": "plot", - "valType": "enumerated", - "values": [ - "inside", - "outside", - "auto", - "none" - ] - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `label`, `color`, `value`, `percent` and `text`.", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "title": { - "editType": "plot", - "font": { - "color": { - "arrayOk": true, - "editType": "plot", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used for `title`.", - "editType": "plot", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "plot", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "position": { - "description": "Specifies the location of the `title`.", - "editType": "plot", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle center", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "role": "object", - "text": { - "description": "Sets the title of the chart. If it is empty, no title is displayed.", - "dflt": "", - "editType": "plot", - "valType": "string" - } - }, - "type": "pie", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "values": { - "description": "Sets the values of the sectors. If omitted, we count occurrences of each label.", - "editType": "calc", - "valType": "data_array" - }, - "valuessrc": { - "description": "Sets the source reference on Chart Studio Cloud for `values`.", - "editType": "none", - "valType": "string" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "pie-like", - "pie", - "showLegend" - ], - "layoutAttributes": { - "extendpiecolors": { - "description": "If `true`, the pie slice colors (whether given by `piecolorway` or inherited from `colorway`) will be extended to three times its original length by first repeating every color 20% lighter then each color 20% darker. This is intended to reduce the likelihood of reusing the same color when you have many slices, but you can set `false` to disable. Colors provided in the trace, using `marker.colors`, are never extended.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "hiddenlabels": { - "description": "hiddenlabels is the funnelarea & pie chart analog of visible:'legendonly' but it can contain many labels, and can simultaneously hide slices from several pies/funnelarea charts", - "editType": "calc", - "valType": "data_array" - }, - "hiddenlabelssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hiddenlabels`.", - "editType": "none", - "valType": "string" - }, - "piecolorway": { - "description": "Sets the default pie slice colors. Defaults to the main `colorway` used for trace colors. If you specify a new list here it can still be extended with lighter and darker colors, see `extendpiecolors`.", - "editType": "calc", - "valType": "colorlist" - } - }, - "meta": { - "description": "A data visualized by the sectors of the pie is set in `values`. The sector labels are set in `labels`. The sector colors are set in `marker.colors`" - }, - "type": "pie" - }, - "quiver": { - "animatable": true, - "attributes": { - "anchor": { - "description": "Sets the arrows' anchor with respect to their (x,y) positions. Use *tail* to place (x,y) at the base, *tip* to place (x,y) at the head, or *cm*/*center*/*middle* to center the arrow on (x,y).", - "dflt": "tail", - "editType": "calc", - "valType": "enumerated", - "values": [ - "tip", - "tail", - "cm", - "center", - "middle" - ] - }, - "arrow_scale": { - "description": "Deprecated alias for `arrowsize`-based sizing. Prefer using `arrowsize`.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "arrowsize": { - "description": "Scales the size of the arrow head relative to a base size. Higher values produce larger heads.", - "dflt": 1, - "editType": "calc", - "min": 0.3, - "valType": "number" - }, - "arrowwidth": { - "description": "Sets the width (in px) of the arrow line (alias of `line.width`).", - "editType": "style", - "min": 0.1, - "valType": "number" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `colorscale`. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "c": { - "anim": true, - "description": "Sets the scalar values used to map colors via the colorscale. If not provided, the magnitude sqrt(u^2 + v^2) is used.", - "editType": "calc", - "valType": "data_array" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v norm) or the bounds set in `cmin` and `cmax` Defaults to `false` when `cmin` and `cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Value should have the same units as u/v norm and if set, `cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `cmin` and/or `cmax` to be equidistant to this point. Value should have the same units as u/v norm. Has no effect when `cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Value should have the same units as u/v norm and if set, `cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "csrc": { - "description": "Sets the source reference on Chart Studio Cloud for `c`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "hoverdistance": { - "description": "Maximum distance (in pixels) to look for nearby arrows on hover.", - "dflt": 20, - "editType": "calc", - "min": -1, - "valType": "number" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "u", - "v", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `x`, `y`, `u`, `v`, `text` and `name`. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "ids": { - "anim": true, - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "color": { - "description": "Sets the color of the arrow lines.", - "dflt": "#000", - "editType": "style", - "valType": "color" - }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ] - }, - "editType": "style", - "role": "object", - "shape": { - "description": "Determines the line shape.", - "dflt": "linear", - "editType": "plot", - "valType": "enumerated", - "values": [ - "linear", - "spline", - "hv", - "vh", - "hvh", - "vhv" - ] - }, - "simplify": { - "description": "Simplifies lines by removing nearly-overlapping points.", - "dflt": true, - "editType": "plot", - "valType": "boolean" - }, - "smoothing": { - "description": "Has an effect only if `shape` is set to *spline*. Sets the amount of smoothing.", - "dflt": 1, - "editType": "plot", - "max": 1.3, - "min": 0, - "valType": "number" - }, - "width": { - "description": "Sets the width (in px) of the arrow lines.", - "dflt": 1, - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "reversescale": { - "description": "Reverses the color mapping if true. If true, `cmin` will correspond to the last color in the array and `cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "selected": { - "editType": "style", - "line": { - "color": { - "description": "Sets the line color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object", - "width": { - "description": "Sets the line width of selected points.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "sizemode": { - "description": "Determines whether `sizeref` is set as a *scaled* (unitless) scalar (normalized by the max u/v norm in the vector field), as an *absolute* value (in the same units as the vector field), or *raw* to use the raw vector lengths.", - "dflt": "scaled", - "editType": "calc", - "valType": "enumerated", - "values": [ - "scaled", - "absolute", - "raw" - ] - }, - "sizeref": { - "description": "Adjusts the arrow size scaling. The arrow length is determined by the vector norm multiplied by `sizeref`, optionally normalized when `sizemode` is *scaled*.", - "editType": "calc", - "min": 0, - "valType": "number" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "text": { - "anim": true, - "description": "Sets text elements associated with each (x,y) pair.", - "editType": "calc", - "valType": "data_array" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "style", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the text font.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "textposition": { - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "type": "quiver", - "u": { - "anim": true, - "description": "Sets the x components of the arrow vectors.", - "editType": "calc", - "valType": "data_array" - }, - "uid": { - "anim": true, - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "style", - "line": { - "color": { - "description": "Sets the line color of unselected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object", - "width": { - "description": "Sets the line width of unselected points.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "usrc": { - "description": "Sets the source reference on Chart Studio Cloud for `u`.", - "editType": "none", - "valType": "string" - }, - "v": { - "anim": true, - "description": "Sets the y components of the arrow vectors.", - "editType": "calc", - "valType": "data_array" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - }, - "vsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `v`.", - "editType": "none", - "valType": "string" - }, - "x": { - "anim": true, - "description": "Sets the x coordinates of the arrow locations.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "xaxis": { - "description": "Sets a reference between this trace's x coordinates and a 2D cartesian x axis. If *x* (the default value), the x coordinates refer to `layout.xaxis`. If *x2*, the x coordinates refer to `layout.xaxis2`, and so on.", - "dflt": "x", - "editType": "calc+clearAxisTypes", - "valType": "subplotid" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "anim": true, - "description": "Sets the y coordinates of the arrow locations.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "yaxis": { - "description": "Sets a reference between this trace's y coordinates and a 2D cartesian y axis. If *y* (the default value), the y coordinates refer to `layout.yaxis`. If *y2*, the y coordinates refer to `layout.yaxis2`, and so on.", - "dflt": "y", - "editType": "calc+clearAxisTypes", - "valType": "subplotid" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - } - }, - "categories": [ - "cartesian", - "svg", - "showLegend", - "scatter-like", - "zoomScale" - ], - "meta": { - "description": "The quiver trace type visualizes vector fields using arrows. Specify a vector field using 4 1D arrays: 2 position arrays `x`, `y` and 2 vector component arrays `u`, `v`. The arrows are drawn exactly at the positions given by `x` and `y`. Arrow length and direction are determined by `u` and `v` components." - }, - "type": "quiver" - }, - "sankey": { - "animatable": false, - "attributes": { - "arrangement": { - "description": "If value is `snap` (the default), the node arrangement is assisted by automatic snapping of elements to preserve space between nodes specified via `nodepad`. If value is `perpendicular`, the nodes can only move along a line perpendicular to the flow. If value is `freeform`, the nodes can freely move on the plane. If value is `fixed`, the nodes are stationary.", - "dflt": "snap", - "editType": "calc", - "valType": "enumerated", - "values": [ - "snap", - "perpendicular", - "freeform", - "fixed" - ] - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "domain": { - "column": { - "description": "If there is a layout grid, use the domain for this column in the grid for this sankey trace .", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "editType": "calc", - "role": "object", - "row": { - "description": "If there is a layout grid, use the domain for this row in the grid for this sankey trace .", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "x": { - "description": "Sets the horizontal domain of this sankey trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array" - }, - "y": { - "description": "Sets the vertical domain of this sankey trace (in plot fraction).", - "dflt": [ - 0, - 1 - ], - "editType": "calc", - "items": [ - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - { - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - } - ], - "valType": "info_array" - } - }, - "hoverinfo": { - "arrayOk": false, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired. Note that this attribute is superseded by `node.hoverinfo` and `node.hoverinfo` for nodes and links respectively.", - "dflt": "all", - "editType": "calc", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [], - "valType": "flaglist" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "calc", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "calc", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "font": { - "color": { - "arrayOk": true, - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "calc", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "showarrow": { - "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - } - }, - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "link": { - "arrowlen": { - "description": "Sets the length (in px) of the links arrow, if 0 no arrow will be drawn.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the `link` color. It can be a single value, or an array for specifying color for each `link`. If `link.color` is omitted, then by default, a translucent grey link will be used.", - "editType": "calc", - "valType": "color" - }, - "colorscales": { - "items": { - "concentrationscales": { - "cmax": { - "description": "Sets the upper bound of the color domain.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain.", - "dflt": 0, - "editType": "calc", - "valType": "number" - }, - "colorscale": { - "description": "Sets the colorscale. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `cmin` and `cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": [ - [ - 0, - "white" - ], - [ - 1, - "black" ->>>>>>> b50bcc3af (Match arrowhead attributes for annotations) - ] - }, - "rangeselector": { - "activecolor": { - "description": "Sets the background color of the active range selector button.", - "editType": "plot", - "valType": "color" - }, - "bgcolor": { - "description": "Sets the background color of the range selector buttons.", - "dflt": "#eee", - "editType": "plot", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the color of the border enclosing the range selector.", - "dflt": "#444", - "editType": "plot", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) of the border enclosing the range selector.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "buttons": { - "items": { - "button": { - "count": { - "description": "Sets the number of steps to take to update the range. Use with `step` to specify the update interval.", - "dflt": 1, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "description": "Sets the specifications for each buttons. By default, a range selector comes with no buttons.", - "editType": "plot", - "label": { - "description": "Sets the text label to appear on the button.", - "editType": "plot", - "valType": "string" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "step": { - "description": "The unit of measurement that the `count` value will set the range by.", - "dflt": "month", - "editType": "plot", - "valType": "enumerated", - "values": [ - "month", - "year", - "day", - "hour", - "minute", - "second", - "all" - ] - }, - "stepmode": { - "description": "Sets the range update mode. If *backward*, the range update shifts the start of range back *count* times *step* milliseconds. If *todate*, the range update shifts the start of range back to the first timestamp from *count* times *step* milliseconds back. For example, with `step` set to *year* and `count` set to *1* the range update shifts the start of the range back to January 01 of the current year. Month and year *todate* are currently available only for the built-in (Gregorian) calendar.", - "dflt": "backward", - "editType": "plot", - "valType": "enumerated", - "values": [ - "backward", - "todate" - ] - }, - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "visible": { - "description": "Determines whether or not this button is visible.", - "dflt": true, - "editType": "plot", - "valType": "boolean" - } - } - }, - "role": "object" - }, - "editType": "plot", - "font": { - "color": { - "editType": "plot", - "valType": "color" - }, - "description": "Sets the font of the range selector button text.", - "editType": "plot", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "plot", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "plot", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "plot", - "valType": "string" - }, - "size": { - "editType": "plot", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "plot", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "plot", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "visible": { - "description": "Determines whether or not this range selector is visible. Note that range selectors are only available for x axes of `type` set to or auto-typed to *date*.", - "editType": "plot", - "valType": "boolean" - }, - "x": { - "description": "Sets the x position (in normalized coordinates) of the range selector.", - "editType": "plot", - "max": 3, - "min": -2, - "valType": "number" - }, - "xanchor": { - "description": "Sets the range selector's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the range selector.", - "dflt": "left", - "editType": "plot", - "valType": "enumerated", - "values": [ - "auto", - "left", - "center", - "right" - ] - }, - "y": { - "description": "Sets the y position (in normalized coordinates) of the range selector.", - "editType": "plot", - "max": 3, - "min": -2, - "valType": "number" - }, - "yanchor": { - "description": "Sets the range selector's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the range selector.", - "dflt": "bottom", - "editType": "plot", - "valType": "enumerated", - "values": [ - "auto", - "top", - "middle", - "bottom" - ] - } - }, - "rangeslider": { - "autorange": { - "description": "Determines whether or not the range slider range is computed in relation to the input data. If `range` is provided, then `autorange` is set to *false*.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "bgcolor": { - "description": "Sets the background color of the range slider.", - "dflt": "#fff", - "editType": "plot", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the border color of the range slider.", - "dflt": "#444", - "editType": "plot", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the border width of the range slider.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "integer" - }, - "editType": "calc", - "range": { - "description": "Sets the range of the range slider. If not set, defaults to the full xaxis range. If the axis `type` is *log*, then you must take the log of your desired range. If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "autorange": false - }, - "items": [ - { - "editType": "calc", - "impliedEdits": { - "^autorange": false - }, - "valType": "any" - }, - { - "editType": "calc", - "impliedEdits": { - "^autorange": false - }, - "valType": "any" - } - ], - "valType": "info_array" - }, - "role": "object", - "thickness": { - "description": "The height of the range slider as a fraction of the total plot area height.", - "dflt": 0.15, - "editType": "plot", - "max": 1, - "min": 0, - "valType": "number" - }, - "visible": { - "description": "Determines whether or not the range slider will be visible. If visible, perpendicular axes will be set to `fixedrange`", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "yaxis": { - "_isSubplotObj": true, - "editType": "calc", - "range": { - "description": "Sets the range of this axis for the rangeslider.", - "editType": "plot", - "items": [ - { - "editType": "plot", - "valType": "any" - }, - { - "editType": "plot", - "valType": "any" - } - ], - "valType": "info_array" - }, - "rangemode": { - "description": "Determines whether or not the range of this axis in the rangeslider use the same value than in the main plot when zooming in/out. If *auto*, the autorange will be used. If *fixed*, the `range` is used. If *match*, the current range of the corresponding y-axis on the main subplot is used.", - "dflt": "match", - "editType": "calc", - "valType": "enumerated", - "values": [ - "auto", - "fixed", - "match" - ] - }, - "role": "object" - } - }, - "role": "object", - "scaleanchor": { - "description": "If set to another axis id (e.g. `x2`, `y`), the range of this axis changes together with the range of the corresponding axis such that the scale of pixels per unit is in a constant ratio. Both axes are still zoomable, but when you zoom one, the other will zoom the same amount, keeping a fixed midpoint. `constrain` and `constraintoward` determine how we enforce the constraint. You can chain these, ie `yaxis: {scaleanchor: *x*}, xaxis2: {scaleanchor: *y*}` but you can only link axes of the same `type`. The linked axis can have the opposite letter (to constrain the aspect ratio) or the same letter (to match scales across subplots). Loops (`yaxis: {scaleanchor: *x*}, xaxis: {scaleanchor: *y*}` or longer) are redundant and the last constraint encountered will be ignored to avoid possible inconsistent constraints via `scaleratio`. Note that setting axes simultaneously in both a `scaleanchor` and a `matches` constraint is currently forbidden. Setting `false` allows to remove a default constraint (occasionally, you may need to prevent a default `scaleanchor` constraint from being applied, eg. when having an image trace `yaxis: {scaleanchor: \"x\"}` is set automatically in order for pixels to be rendered as squares, setting `yaxis: {scaleanchor: false}` allows to remove the constraint).", - "editType": "plot", - "valType": "enumerated", - "values": [ - "/^x([2-9]|[1-9][0-9]+)?( domain)?$/", - "/^y([2-9]|[1-9][0-9]+)?( domain)?$/", - false - ] - }, - "scaleratio": { - "description": "If this axis is linked to another by `scaleanchor`, this determines the pixel to unit scale ratio. For example, if this value is 10, then every unit on this axis spans 10 times the number of pixels as a unit on the linked axis. Use this for example to create an elevation profile where the vertical scale is exaggerated a fixed amount with respect to the horizontal.", - "dflt": 1, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "ticks", - "valType": "boolean" - }, - "showdividers": { - "description": "Determines whether or not a dividers are drawn between the category levels of this axis. Only has an effect on *multicategory* axes.", - "dflt": true, - "editType": "ticks", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showgrid": { - "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.", - "editType": "ticks", - "valType": "boolean" - }, - "showline": { - "description": "Determines whether or not a line bounding this axis is drawn.", - "dflt": false, - "editType": "ticks+layoutstyle", - "valType": "boolean" - }, - "showspikes": { - "description": "Determines whether or not spikes (aka droplines) are drawn for this axis. Note: This only takes affect when hovermode = closest", - "dflt": false, - "editType": "modebar", - "valType": "boolean" - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "ticks", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "side": { - "description": "Determines whether a x (y) axis is positioned at the *bottom* (*left*) or *top* (*right*) of the plotting area.", - "editType": "plot", - "valType": "enumerated", - "values": [ - "top", - "bottom", - "left", - "right" - ] - }, - "spikecolor": { - "description": "Sets the spike color. If undefined, will use the series color", - "dflt": null, - "editType": "none", - "valType": "color" - }, - "spikedash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "dash", - "editType": "none", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ] - }, - "spikemode": { - "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on", - "dflt": "toaxis", - "editType": "none", - "flags": [ - "toaxis", - "across", - "marker" - ], - "valType": "flaglist" - }, - "spikesnap": { - "description": "Determines whether spikelines are stuck to the cursor or to the closest datapoints.", - "dflt": "hovered data", - "editType": "none", - "valType": "enumerated", - "values": [ - "data", - "cursor", - "hovered data" - ] - }, - "spikethickness": { - "description": "Sets the width (in px) of the zero line.", - "dflt": 3, - "editType": "none", - "valType": "number" - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "ticks", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "ticks", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "ticks", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "ticks", - "valType": "color" - }, - "description": "Sets the tick font.", - "editType": "ticks", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "ticks", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "ticks", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "ticks", - "valType": "string" - }, - "size": { - "editType": "ticks", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "ticks", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "ticks", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "ticks", - "items": [ - { - "editType": "ticks", - "valType": "any" - }, - { - "editType": "ticks", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "ticks", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "ticks", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "ticks", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabelindex": { - "arrayOk": true, - "description": "Only for axes with `type` *date* or *linear*. Instead of drawing the major tick label, draw the label for the minor tick that is n positions away from the major tick. E.g. to always draw the label for the minor tick before each major tick, choose `ticklabelindex` -1. This is useful for date axes with `ticklabelmode` *period* if you want to label the period that ends with each major tick instead of the period that begins there.", - "editType": "calc", - "valType": "integer" - }, - "ticklabelindexsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticklabelindex`.", - "editType": "none", - "valType": "string" - }, - "ticklabelmode": { - "description": "Determines where tick labels are drawn with respect to their corresponding ticks and grid lines. Only has an effect for axes of `type` *date* When set to *period*, tick labels are drawn in the middle of the period between ticks.", - "dflt": "instant", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "instant", - "period" - ] - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. Otherwise on *category* and *multicategory* axes the default is *allow*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn with respect to the axis. Please note that top or bottom has no effect on x axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Similarly, left or right has no effect on y axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Has no effect on *multicategory* axes. When used on axes linked by `matches` or `scaleanchor`, no extra padding for inside labels would be added by autorange, so that the scales could match.", - "dflt": "outside", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelshift": { - "description": "Shifts the tick labels by the specified number of pixels in parallel to the axis. Positive values move the labels in the positive direction of the axis.", - "dflt": 0, - "editType": "ticks", - "valType": "integer" - }, - "ticklabelstandoff": { - "description": "Sets the standoff distance (in px) between the axis tick labels and their default position. A positive `ticklabelstandoff` moves the labels farther away from the plot area if `ticklabelposition` is *outside*, and deeper into the plot area if `ticklabelposition` is *inside*. A negative `ticklabelstandoff` works in the opposite direction, moving outside ticks towards the plot area and inside ticks towards the outside. If the negative value is large enough, inside ticks can even end up outside and vice versa.", - "dflt": 0, - "editType": "ticks", - "valType": "integer" - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "ticks", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "ticks", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided). If *sync*, the number of ticks will sync with the overlayed axis set by `overlaying` property.", - "editType": "ticks", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array", - "sync" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "ticks", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "tickson": { - "description": "Determines where ticks and grid lines are drawn with respect to their corresponding tick labels. Only has an effect for axes of `type` *category* or *multicategory*. When set to *boundaries*, ticks and grid lines are drawn half a category to the left/bottom of labels.", - "dflt": "labels", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "labels", - "boundaries" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "ticks", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "ticks", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "ticks", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "ticks", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "ticks", - "font": { - "color": { - "editType": "ticks", - "valType": "color" - }, - "description": "Sets this axis' title font.", - "editType": "ticks", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "ticks", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "ticks", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "ticks", - "valType": "string" - }, - "size": { - "editType": "ticks", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "ticks", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "ticks", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "standoff": { - "description": "Sets the standoff distance (in px) between the axis labels and the title text The default value is a function of the axis tick labels, the title `font.size` and the axis `linewidth`. Note that the axis title position is always constrained within the margins, so the actual standoff distance is always less than the set or default value. By setting `standoff` and turning on `automargin`, plotly.js will push the margins to fit the axis title at given standoff distance.", - "editType": "ticks", - "min": 0, - "valType": "number" - }, - "text": { - "description": "Sets the title of this axis.", - "editType": "ticks", - "valType": "string" - } - }, -<<<<<<< HEAD -======= - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", - "dflt": "circle", - "editType": "calc", - "valType": "string" - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", - "dflt": "markers", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "selected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "role": "object" - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a map subplot. If *map* (the default value), the data refer to `layout.map`. If *map2*, the data refer to `layout.map2`, and so on.", - "dflt": "map", - "editType": "calc", - "valType": "subplotid" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets the icon text font (color=map.layer.paint.text-color, size=map.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "dflt": "Open Sans Regular, Arial Unicode MS Regular", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "role": "object", - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "textposition": { - "arrayOk": false, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "type": "scattermap", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "role": "object" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "map", - "gl", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The data visualized as scatter point, lines or marker symbols on a MapLibre GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", - "hrName": "scatter_map" - }, - "type": "scattermap" - }, - "scattermapbox": { - "animatable": false, - "attributes": { - "below": { - "description": "Determines if this scattermapbox trace's layers are to be inserted before the layer with the specified ID. By default, scattermapbox layers are inserted above all the base layers. To place the scattermapbox layers above every other layer, set `below` to *''*.", - "editType": "calc", - "valType": "string" - }, - "cluster": { - "color": { - "arrayOk": true, - "description": "Sets the color for each cluster step.", - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether clustering is enabled or disabled.", - "editType": "calc", - "valType": "boolean" - }, - "maxzoom": { - "description": "Sets the maximum zoom level. At zoom levels equal to or greater than this, points will never be clustered.", - "dflt": 24, - "editType": "calc", - "max": 24, - "min": 0, - "valType": "number" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "size": { - "arrayOk": true, - "description": "Sets the size for each cluster step.", - "dflt": 20, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "step": { - "arrayOk": true, - "description": "Sets how many points it takes to create a cluster or advance to the next cluster step. Use this in conjunction with arrays for `size` and / or `color`. If an integer, steps start at multiples of this number. If an array, each step extends from the given value until one less than the next value.", - "dflt": -1, - "editType": "calc", - "min": -1, - "valType": "number" - }, - "stepsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `step`.", - "editType": "none", - "valType": "string" - } - }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "fill": { - "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.", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "toself" - ] - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "calc", - "valType": "color" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "calc", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "lon", - "lat", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "lat": { - "description": "Sets the latitude coordinates (in degrees North).", - "editType": "calc", - "valType": "data_array" - }, - "latsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lat`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "color": { - "description": "Sets the line color.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "lon": { - "description": "Sets the longitude coordinates (in degrees East).", - "editType": "calc", - "valType": "data_array" - }, - "lonsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lon`.", - "editType": "none", - "valType": "string" - }, - "marker": { - "allowoverlap": { - "description": "Flag to draw all symbols, even if they overlap.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "angle": { - "arrayOk": true, - "description": "Sets the marker orientation from true North, in degrees clockwise. When using the *auto* default, no rotation would be applied in perspective views which is different from using a zero angle.", - "dflt": "auto", - "editType": "calc", - "valType": "number" - }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "calc", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "calc", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "calc", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "calc", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "calc", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "calc", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", - "items": [ - { - "editType": "calc", - "valType": "any" - }, - { - "editType": "calc", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "calc", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "calc", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "calc", - "font": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol. Full list: https://www.mapbox.com/maki-icons/ Note that the array `marker.color` and `marker.size` are only available for *circle* symbols.", - "dflt": "circle", - "editType": "calc", - "valType": "string" - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover.", - "dflt": "markers", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "selected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "role": "object" - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "mapbox subplots and traces are deprecated! Please consider switching to `map` subplots and traces. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ Sets a reference between this trace's data coordinates and a mapbox subplot. If *mapbox* (the default value), the data refer to `layout.mapbox`. If *mapbox2*, the data refer to `layout.mapbox2`, and so on.", - "dflt": "mapbox", - "editType": "calc", - "valType": "subplotid" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (lon,lat) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets the icon text font (color=mapbox.layer.paint.text-color, size=mapbox.layer.layout.text-size). Has an effect only when `type` is set to *symbol*.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "dflt": "Open Sans Regular, Arial Unicode MS Regular", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "role": "object", - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "textposition": { - "arrayOk": false, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `lat`, `lon` and `text`.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "calc", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "type": "scattermapbox", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "role": "object" - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "mapbox", - "gl", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "*scattermapbox* trace is deprecated! Please consider switching to the *scattermap* trace type and `map` subplots. Learn more at: https://plotly.com/python/maplibre-migration/ as well as https://plotly.com/javascript/maplibre-migration/ The data visualized as scatter point, lines or marker symbols on a Mapbox GL geographic map is provided by longitude/latitude pairs in `lon` and `lat`.", - "hrName": "scatter_mapbox" - }, - "type": "scattermapbox" - }, - "scatterpolar": { - "animatable": false, - "attributes": { - "cliponaxis": { - "description": "Determines whether or not markers and text nodes are clipped about the subplot axes. To show markers and text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "dr": { - "description": "Sets the r coordinate step.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "dtheta": { - "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates.", - "editType": "calc", - "valType": "number" - }, - "fill": { - "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. scatterpolar has a subset of the options available to scatter. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other.", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "toself", - "tonext" - ] - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "style", - "valType": "color" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "r", - "theta", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "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*.", - "editType": "style", - "flags": [ - "points", - "fills" - ], - "valType": "flaglist" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "backoff": { - "arrayOk": true, - "description": "Sets the line back off from the end point of the nth line segment (in px). This option is useful e.g. to avoid overlap with arrowhead markers. With *auto* the lines would trim before markers if `marker.angleref` is set to *previous*.", - "dflt": "auto", - "editType": "plot", - "min": 0, - "valType": "number" - }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the line color.", - "editType": "style", - "valType": "color" - }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ] - }, - "editType": "calc", - "role": "object", - "shape": { - "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes.", - "dflt": "linear", - "editType": "plot", - "valType": "enumerated", - "values": [ - "linear", - "spline" - ] - }, - "smoothing": { - "description": "Has an effect only if `shape` is set to *spline* Sets the amount of smoothing. *0* corresponds to no smoothing (equivalent to a *linear* shape).", - "dflt": 1, - "editType": "plot", - "max": 1.3, - "min": 0, - "valType": "number" - }, - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "marker": { - "angle": { - "arrayOk": true, - "description": "Sets the marker angle in respect to `angleref`.", - "dflt": 0, - "editType": "plot", - "valType": "angle" - }, - "angleref": { - "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen.", - "dflt": "up", - "editType": "plot", - "valType": "enumerated", - "values": [ - "previous", - "up" - ] - }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "style", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "gradient": { - "color": { - "arrayOk": true, - "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "role": "object", - "type": { - "arrayOk": true, - "description": "Sets the type of gradient used to fill the markers", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "radial", - "horizontal", - "vertical", - "none" - ] - }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - } - }, - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "style", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - } - }, - "maxdisplayed": { - "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "standoff": { - "arrayOk": true, - "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", - "dflt": "circle", - "editType": "style", - "valType": "enumerated", - "values": [ - 0, - "0", - "circle", - 100, - "100", - "circle-open", - 200, - "200", - "circle-dot", - 300, - "300", - "circle-open-dot", - 1, - "1", - "square", - 101, - "101", - "square-open", - 201, - "201", - "square-dot", - 301, - "301", - "square-open-dot", - 2, - "2", - "diamond", - 102, - "102", - "diamond-open", - 202, - "202", - "diamond-dot", - 302, - "302", - "diamond-open-dot", - 3, - "3", - "cross", - 103, - "103", - "cross-open", - 203, - "203", - "cross-dot", - 303, - "303", - "cross-open-dot", - 4, - "4", - "x", - 104, - "104", - "x-open", - 204, - "204", - "x-dot", - 304, - "304", - "x-open-dot", - 5, - "5", - "triangle-up", - 105, - "105", - "triangle-up-open", - 205, - "205", - "triangle-up-dot", - 305, - "305", - "triangle-up-open-dot", - 6, - "6", - "triangle-down", - 106, - "106", - "triangle-down-open", - 206, - "206", - "triangle-down-dot", - 306, - "306", - "triangle-down-open-dot", - 7, - "7", - "triangle-left", - 107, - "107", - "triangle-left-open", - 207, - "207", - "triangle-left-dot", - 307, - "307", - "triangle-left-open-dot", - 8, - "8", - "triangle-right", - 108, - "108", - "triangle-right-open", - 208, - "208", - "triangle-right-dot", - 308, - "308", - "triangle-right-open-dot", - 9, - "9", - "triangle-ne", - 109, - "109", - "triangle-ne-open", - 209, - "209", - "triangle-ne-dot", - 309, - "309", - "triangle-ne-open-dot", - 10, - "10", - "triangle-se", - 110, - "110", - "triangle-se-open", - 210, - "210", - "triangle-se-dot", - 310, - "310", - "triangle-se-open-dot", - 11, - "11", - "triangle-sw", - 111, - "111", - "triangle-sw-open", - 211, - "211", - "triangle-sw-dot", - 311, - "311", - "triangle-sw-open-dot", - 12, - "12", - "triangle-nw", - 112, - "112", - "triangle-nw-open", - 212, - "212", - "triangle-nw-dot", - 312, - "312", - "triangle-nw-open-dot", - 13, - "13", - "pentagon", - 113, - "113", - "pentagon-open", - 213, - "213", - "pentagon-dot", - 313, - "313", - "pentagon-open-dot", - 14, - "14", - "hexagon", - 114, - "114", - "hexagon-open", - 214, - "214", - "hexagon-dot", - 314, - "314", - "hexagon-open-dot", - 15, - "15", - "hexagon2", - 115, - "115", - "hexagon2-open", - 215, - "215", - "hexagon2-dot", - 315, - "315", - "hexagon2-open-dot", - 16, - "16", - "octagon", - 116, - "116", - "octagon-open", - 216, - "216", - "octagon-dot", - 316, - "316", - "octagon-open-dot", - 17, - "17", - "star", - 117, - "117", - "star-open", - 217, - "217", - "star-dot", - 317, - "317", - "star-open-dot", - 18, - "18", - "hexagram", - 118, - "118", - "hexagram-open", - 218, - "218", - "hexagram-dot", - 318, - "318", - "hexagram-open-dot", - 19, - "19", - "star-triangle-up", - 119, - "119", - "star-triangle-up-open", - 219, - "219", - "star-triangle-up-dot", - 319, - "319", - "star-triangle-up-open-dot", - 20, - "20", - "star-triangle-down", - 120, - "120", - "star-triangle-down-open", - 220, - "220", - "star-triangle-down-dot", - 320, - "320", - "star-triangle-down-open-dot", - 21, - "21", - "star-square", - 121, - "121", - "star-square-open", - 221, - "221", - "star-square-dot", - 321, - "321", - "star-square-open-dot", - 22, - "22", - "star-diamond", - 122, - "122", - "star-diamond-open", - 222, - "222", - "star-diamond-dot", - 322, - "322", - "star-diamond-open-dot", - 23, - "23", - "diamond-tall", - 123, - "123", - "diamond-tall-open", - 223, - "223", - "diamond-tall-dot", - 323, - "323", - "diamond-tall-open-dot", - 24, - "24", - "diamond-wide", - 124, - "124", - "diamond-wide-open", - 224, - "224", - "diamond-wide-dot", - 324, - "324", - "diamond-wide-open-dot", - 25, - "25", - "hourglass", - 125, - "125", - "hourglass-open", - 26, - "26", - "bowtie", - 126, - "126", - "bowtie-open", - 27, - "27", - "circle-cross", - 127, - "127", - "circle-cross-open", - 28, - "28", - "circle-x", - 128, - "128", - "circle-x-open", - 29, - "29", - "square-cross", - 129, - "129", - "square-cross-open", - 30, - "30", - "square-x", - 130, - "130", - "square-x-open", - 31, - "31", - "diamond-cross", - 131, - "131", - "diamond-cross-open", - 32, - "32", - "diamond-x", - 132, - "132", - "diamond-x-open", - 33, - "33", - "cross-thin", - 133, - "133", - "cross-thin-open", - 34, - "34", - "x-thin", - 134, - "134", - "x-thin-open", - 35, - "35", - "asterisk", - 135, - "135", - "asterisk-open", - 36, - "36", - "hash", - 136, - "136", - "hash-open", - 236, - "236", - "hash-dot", - 336, - "336", - "hash-open-dot", - 37, - "37", - "y-up", - 137, - "137", - "y-up-open", - 38, - "38", - "y-down", - 138, - "138", - "y-down-open", - 39, - "39", - "y-left", - 139, - "139", - "y-left-open", - 40, - "40", - "y-right", - 140, - "140", - "y-right-open", - 41, - "41", - "line-ew", - 141, - "141", - "line-ew-open", - 42, - "42", - "line-ns", - 142, - "142", - "line-ns-open", - 43, - "43", - "line-ne", - 143, - "143", - "line-ne-open", - 44, - "44", - "line-nw", - 144, - "144", - "line-nw-open", - 45, - "45", - "arrow-up", - 145, - "145", - "arrow-up-open", - 46, - "46", - "arrow-down", - 146, - "146", - "arrow-down-open", - 47, - "47", - "arrow-left", - 147, - "147", - "arrow-left-open", - 48, - "48", - "arrow-right", - 148, - "148", - "arrow-right-open", - 49, - "49", - "arrow-bar-up", - 149, - "149", - "arrow-bar-up-open", - 50, - "50", - "arrow-bar-down", - 150, - "150", - "arrow-bar-down-open", - 51, - "51", - "arrow-bar-left", - 151, - "151", - "arrow-bar-left-open", - 52, - "52", - "arrow-bar-right", - 152, - "152", - "arrow-bar-right-open", - 53, - "53", - "arrow", - 153, - "153", - "arrow-open", - 54, - "54", - "arrow-wide", - 154, - "154", - "arrow-wide-open" - ] - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "r": { - "description": "Sets the radial coordinates", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "r0": { - "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "rsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `r`.", - "editType": "none", - "valType": "string" - }, - "selected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", - "dflt": "polar", - "editType": "calc", - "valType": "subplotid" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "style", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the text font.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "textposition": { - "arrayOk": true, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "theta": { - "description": "Sets the angular coordinates", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "theta0": { - "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "thetasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `theta`.", - "editType": "none", - "valType": "string" - }, - "thetaunit": { - "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes.", - "dflt": "degrees", - "editType": "calc+clearAxisTypes", - "valType": "enumerated", - "values": [ - "radians", - "degrees", - "gradians" - ] - }, - "type": "scatterpolar", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "polar", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The scatterpolar trace type encompasses line charts, scatter charts, text charts, and bubble charts in polar coordinates. The data visualized as scatter point or lines is set in `r` (radial) and `theta` (angular) coordinates Text (appearing either on the chart or on hover only) is via `text`. Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", - "hrName": "scatter_polar" - }, - "type": "scatterpolar" - }, - "scatterpolargl": { - "animatable": false, - "attributes": { - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "dr": { - "description": "Sets the r coordinate step.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "dtheta": { - "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates.", - "editType": "calc", - "valType": "number" - }, - "fill": { - "description": "Sets the area to fill with a solid color. Defaults to *none* unless this trace is stacked, then it gets *tonexty* (*tonextx*) if `orientation` is *v* (*h*) Use with `fillcolor` if not *none*. *tozerox* and *tozeroy* fill to x=0 and y=0 respectively. *tonextx* and *tonexty* fill between the endpoints of this trace and the endpoints of the trace before it, connecting those endpoints with straight lines (to make a stacked area graph); if there is no trace before it, they behave like *tozerox* and *tozeroy*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other. Traces in a `stackgroup` will only fill to (or be filled to) other traces in the same group. With multiple `stackgroup`s or some traces stacked and some not, if fill-linked traces are not already consecutive, the later ones will be pushed down in the drawing order.", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "tozeroy", - "tozerox", - "tonexty", - "tonextx", - "toself", - "tonext" - ] - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "calc", - "valType": "color" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "r", - "theta", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "color": { - "description": "Sets the line color.", - "editType": "calc", - "valType": "color" - }, - "dash": { - "description": "Sets the style of the lines.", - "dflt": "solid", - "editType": "calc", - "valType": "enumerated", - "values": [ - "dash", - "dashdot", - "dot", - "longdash", - "longdashdot", - "solid" - ] - }, - "editType": "calc", - "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "marker": { - "angle": { - "arrayOk": true, - "description": "Sets the marker angle in respect to `angleref`.", - "dflt": 0, - "editType": "calc", - "valType": "angle" - }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "calc", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "calc", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "calc", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "calc", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "calc", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "calc", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "calc", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "calc", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "calc", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "calc", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "calc", - "items": [ - { - "editType": "calc", - "valType": "any" - }, - { - "editType": "calc", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "calc", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "calc", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "calc", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "calc", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "calc", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "calc", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "calc", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "calc", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "calc", - "font": { - "color": { - "editType": "calc", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "calc", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "size": { - "editType": "calc", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "calc", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "calc", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "calc", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "calc", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "calc", - "min": 0, - "valType": "number" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - } - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", - "dflt": "circle", - "editType": "calc", - "valType": "enumerated", - "values": [ - 0, - "0", - "circle", - 100, - "100", - "circle-open", - 200, - "200", - "circle-dot", - 300, - "300", - "circle-open-dot", - 1, - "1", - "square", - 101, - "101", - "square-open", - 201, - "201", - "square-dot", - 301, - "301", - "square-open-dot", - 2, - "2", - "diamond", - 102, - "102", - "diamond-open", - 202, - "202", - "diamond-dot", - 302, - "302", - "diamond-open-dot", - 3, - "3", - "cross", - 103, - "103", - "cross-open", - 203, - "203", - "cross-dot", - 303, - "303", - "cross-open-dot", - 4, - "4", - "x", - 104, - "104", - "x-open", - 204, - "204", - "x-dot", - 304, - "304", - "x-open-dot", - 5, - "5", - "triangle-up", - 105, - "105", - "triangle-up-open", - 205, - "205", - "triangle-up-dot", - 305, - "305", - "triangle-up-open-dot", - 6, - "6", - "triangle-down", - 106, - "106", - "triangle-down-open", - 206, - "206", - "triangle-down-dot", - 306, - "306", - "triangle-down-open-dot", - 7, - "7", - "triangle-left", - 107, - "107", - "triangle-left-open", - 207, - "207", - "triangle-left-dot", - 307, - "307", - "triangle-left-open-dot", - 8, - "8", - "triangle-right", - 108, - "108", - "triangle-right-open", - 208, - "208", - "triangle-right-dot", - 308, - "308", - "triangle-right-open-dot", - 9, - "9", - "triangle-ne", - 109, - "109", - "triangle-ne-open", - 209, - "209", - "triangle-ne-dot", - 309, - "309", - "triangle-ne-open-dot", - 10, - "10", - "triangle-se", - 110, - "110", - "triangle-se-open", - 210, - "210", - "triangle-se-dot", - 310, - "310", - "triangle-se-open-dot", - 11, - "11", - "triangle-sw", - 111, - "111", - "triangle-sw-open", - 211, - "211", - "triangle-sw-dot", - 311, - "311", - "triangle-sw-open-dot", - 12, - "12", - "triangle-nw", - 112, - "112", - "triangle-nw-open", - 212, - "212", - "triangle-nw-dot", - 312, - "312", - "triangle-nw-open-dot", - 13, - "13", - "pentagon", - 113, - "113", - "pentagon-open", - 213, - "213", - "pentagon-dot", - 313, - "313", - "pentagon-open-dot", - 14, - "14", - "hexagon", - 114, - "114", - "hexagon-open", - 214, - "214", - "hexagon-dot", - 314, - "314", - "hexagon-open-dot", - 15, - "15", - "hexagon2", - 115, - "115", - "hexagon2-open", - 215, - "215", - "hexagon2-dot", - 315, - "315", - "hexagon2-open-dot", - 16, - "16", - "octagon", - 116, - "116", - "octagon-open", - 216, - "216", - "octagon-dot", - 316, - "316", - "octagon-open-dot", - 17, - "17", - "star", - 117, - "117", - "star-open", - 217, - "217", - "star-dot", - 317, - "317", - "star-open-dot", - 18, - "18", - "hexagram", - 118, - "118", - "hexagram-open", - 218, - "218", - "hexagram-dot", - 318, - "318", - "hexagram-open-dot", - 19, - "19", - "star-triangle-up", - 119, - "119", - "star-triangle-up-open", - 219, - "219", - "star-triangle-up-dot", - 319, - "319", - "star-triangle-up-open-dot", - 20, - "20", - "star-triangle-down", - 120, - "120", - "star-triangle-down-open", - 220, - "220", - "star-triangle-down-dot", - 320, - "320", - "star-triangle-down-open-dot", - 21, - "21", - "star-square", - 121, - "121", - "star-square-open", - 221, - "221", - "star-square-dot", - 321, - "321", - "star-square-open-dot", - 22, - "22", - "star-diamond", - 122, - "122", - "star-diamond-open", - 222, - "222", - "star-diamond-dot", - 322, - "322", - "star-diamond-open-dot", - 23, - "23", - "diamond-tall", - 123, - "123", - "diamond-tall-open", - 223, - "223", - "diamond-tall-dot", - 323, - "323", - "diamond-tall-open-dot", - 24, - "24", - "diamond-wide", - 124, - "124", - "diamond-wide-open", - 224, - "224", - "diamond-wide-dot", - 324, - "324", - "diamond-wide-open-dot", - 25, - "25", - "hourglass", - 125, - "125", - "hourglass-open", - 26, - "26", - "bowtie", - 126, - "126", - "bowtie-open", - 27, - "27", - "circle-cross", - 127, - "127", - "circle-cross-open", - 28, - "28", - "circle-x", - 128, - "128", - "circle-x-open", - 29, - "29", - "square-cross", - 129, - "129", - "square-cross-open", - 30, - "30", - "square-x", - 130, - "130", - "square-x-open", - 31, - "31", - "diamond-cross", - 131, - "131", - "diamond-cross-open", - 32, - "32", - "diamond-x", - 132, - "132", - "diamond-x-open", - 33, - "33", - "cross-thin", - 133, - "133", - "cross-thin-open", - 34, - "34", - "x-thin", - 134, - "134", - "x-thin-open", - 35, - "35", - "asterisk", - 135, - "135", - "asterisk-open", - 36, - "36", - "hash", - 136, - "136", - "hash-open", - 236, - "236", - "hash-dot", - 336, - "336", - "hash-open-dot", - 37, - "37", - "y-up", - 137, - "137", - "y-up-open", - 38, - "38", - "y-down", - 138, - "138", - "y-down-open", - 39, - "39", - "y-left", - 139, - "139", - "y-left-open", - 40, - "40", - "y-right", - 140, - "140", - "y-right-open", - 41, - "41", - "line-ew", - 141, - "141", - "line-ew-open", - 42, - "42", - "line-ns", - 142, - "142", - "line-ns-open", - 43, - "43", - "line-ne", - 143, - "143", - "line-ne-open", - 44, - "44", - "line-nw", - 144, - "144", - "line-nw-open", - 45, - "45", - "arrow-up", - 145, - "145", - "arrow-up-open", - 46, - "46", - "arrow-down", - 146, - "146", - "arrow-down-open", - 47, - "47", - "arrow-left", - 147, - "147", - "arrow-left-open", - 48, - "48", - "arrow-right", - 148, - "148", - "arrow-right-open", - 49, - "49", - "arrow-bar-up", - 149, - "149", - "arrow-bar-up-open", - 50, - "50", - "arrow-bar-down", - 150, - "150", - "arrow-bar-down-open", - 51, - "51", - "arrow-bar-left", - 151, - "151", - "arrow-bar-left-open", - 52, - "52", - "arrow-bar-right", - 152, - "152", - "arrow-bar-right-open", - 53, - "53", - "arrow", - 153, - "153", - "arrow-open", - 54, - "54", - "arrow-wide", - 154, - "154", - "arrow-wide-open" - ] - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "r": { - "description": "Sets the radial coordinates", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "r0": { - "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "rsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `r`.", - "editType": "none", - "valType": "string" - }, - "selected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a polar subplot. If *polar* (the default value), the data refer to `layout.polar`. If *polar2*, the data refer to `layout.polar2`, and so on.", - "dflt": "polar", - "editType": "calc", - "valType": "subplotid" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the text font.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "bold" - ] - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "textposition": { - "arrayOk": true, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `r`, `theta` and `text`.", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "theta": { - "description": "Sets the angular coordinates", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "theta0": { - "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "thetasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `theta`.", - "editType": "none", - "valType": "string" - }, - "thetaunit": { - "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes.", - "dflt": "degrees", - "editType": "calc+clearAxisTypes", - "valType": "enumerated", - "values": [ - "radians", - "degrees", - "gradians" - ] - }, - "type": "scatterpolargl", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "gl", - "regl", - "polar", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The scatterpolargl trace type encompasses line charts, scatter charts, and bubble charts in polar coordinates using the WebGL plotting engine. The data visualized as scatter point or lines is set in `r` (radial) and `theta` (angular) coordinates Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", - "hrName": "scatter_polar_gl" - }, - "type": "scatterpolargl" - }, - "scattersmith": { - "animatable": false, - "attributes": { - "cliponaxis": { - "description": "Determines whether or not markers and text nodes are clipped about the subplot axes. To show markers and text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "fill": { - "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. scattersmith has a subset of the options available to scatter. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other.", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "toself", - "tonext" - ] - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "style", - "valType": "color" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "real", - "imag", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "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*.", - "editType": "style", - "flags": [ - "points", - "fills" - ], - "valType": "flaglist" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "imag": { - "description": "Sets the imaginary component of the data, in units of normalized impedance such that real=1, imag=0 is the center of the chart.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "imagsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `imag`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "backoff": { - "arrayOk": true, - "description": "Sets the line back off from the end point of the nth line segment (in px). This option is useful e.g. to avoid overlap with arrowhead markers. With *auto* the lines would trim before markers if `marker.angleref` is set to *previous*.", - "dflt": "auto", - "editType": "plot", - "min": 0, - "valType": "number" - }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the line color.", - "editType": "style", - "valType": "color" - }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ] - }, - "editType": "calc", - "role": "object", - "shape": { - "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes.", - "dflt": "linear", - "editType": "plot", - "valType": "enumerated", - "values": [ - "linear", - "spline" - ] - }, - "smoothing": { - "description": "Has an effect only if `shape` is set to *spline* Sets the amount of smoothing. *0* corresponds to no smoothing (equivalent to a *linear* shape).", - "dflt": 1, - "editType": "plot", - "max": 1.3, - "min": 0, - "valType": "number" - }, - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "marker": { - "angle": { - "arrayOk": true, - "description": "Sets the marker angle in respect to `angleref`.", - "dflt": 0, - "editType": "plot", - "valType": "angle" - }, - "angleref": { - "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen.", - "dflt": "up", - "editType": "plot", - "valType": "enumerated", - "values": [ - "previous", - "up" - ] - }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "style", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "gradient": { - "color": { - "arrayOk": true, - "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "role": "object", - "type": { - "arrayOk": true, - "description": "Sets the type of gradient used to fill the markers", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "radial", - "horizontal", - "vertical", - "none" - ] - }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - } - }, - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "style", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - } - }, - "maxdisplayed": { - "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "standoff": { - "arrayOk": true, - "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", - "dflt": "circle", - "editType": "style", - "valType": "enumerated", - "values": [ - 0, - "0", - "circle", - 100, - "100", - "circle-open", - 200, - "200", - "circle-dot", - 300, - "300", - "circle-open-dot", - 1, - "1", - "square", - 101, - "101", - "square-open", - 201, - "201", - "square-dot", - 301, - "301", - "square-open-dot", - 2, - "2", - "diamond", - 102, - "102", - "diamond-open", - 202, - "202", - "diamond-dot", - 302, - "302", - "diamond-open-dot", - 3, - "3", - "cross", - 103, - "103", - "cross-open", - 203, - "203", - "cross-dot", - 303, - "303", - "cross-open-dot", - 4, - "4", - "x", - 104, - "104", - "x-open", - 204, - "204", - "x-dot", - 304, - "304", - "x-open-dot", - 5, - "5", - "triangle-up", - 105, - "105", - "triangle-up-open", - 205, - "205", - "triangle-up-dot", - 305, - "305", - "triangle-up-open-dot", - 6, - "6", - "triangle-down", - 106, - "106", - "triangle-down-open", - 206, - "206", - "triangle-down-dot", - 306, - "306", - "triangle-down-open-dot", - 7, - "7", - "triangle-left", - 107, - "107", - "triangle-left-open", - 207, - "207", - "triangle-left-dot", - 307, - "307", - "triangle-left-open-dot", - 8, - "8", - "triangle-right", - 108, - "108", - "triangle-right-open", - 208, - "208", - "triangle-right-dot", - 308, - "308", - "triangle-right-open-dot", - 9, - "9", - "triangle-ne", - 109, - "109", - "triangle-ne-open", - 209, - "209", - "triangle-ne-dot", - 309, - "309", - "triangle-ne-open-dot", - 10, - "10", - "triangle-se", - 110, - "110", - "triangle-se-open", - 210, - "210", - "triangle-se-dot", - 310, - "310", - "triangle-se-open-dot", - 11, - "11", - "triangle-sw", - 111, - "111", - "triangle-sw-open", - 211, - "211", - "triangle-sw-dot", - 311, - "311", - "triangle-sw-open-dot", - 12, - "12", - "triangle-nw", - 112, - "112", - "triangle-nw-open", - 212, - "212", - "triangle-nw-dot", - 312, - "312", - "triangle-nw-open-dot", - 13, - "13", - "pentagon", - 113, - "113", - "pentagon-open", - 213, - "213", - "pentagon-dot", - 313, - "313", - "pentagon-open-dot", - 14, - "14", - "hexagon", - 114, - "114", - "hexagon-open", - 214, - "214", - "hexagon-dot", - 314, - "314", - "hexagon-open-dot", - 15, - "15", - "hexagon2", - 115, - "115", - "hexagon2-open", - 215, - "215", - "hexagon2-dot", - 315, - "315", - "hexagon2-open-dot", - 16, - "16", - "octagon", - 116, - "116", - "octagon-open", - 216, - "216", - "octagon-dot", - 316, - "316", - "octagon-open-dot", - 17, - "17", - "star", - 117, - "117", - "star-open", - 217, - "217", - "star-dot", - 317, - "317", - "star-open-dot", - 18, - "18", - "hexagram", - 118, - "118", - "hexagram-open", - 218, - "218", - "hexagram-dot", - 318, - "318", - "hexagram-open-dot", - 19, - "19", - "star-triangle-up", - 119, - "119", - "star-triangle-up-open", - 219, - "219", - "star-triangle-up-dot", - 319, - "319", - "star-triangle-up-open-dot", - 20, - "20", - "star-triangle-down", - 120, - "120", - "star-triangle-down-open", - 220, - "220", - "star-triangle-down-dot", - 320, - "320", - "star-triangle-down-open-dot", - 21, - "21", - "star-square", - 121, - "121", - "star-square-open", - 221, - "221", - "star-square-dot", - 321, - "321", - "star-square-open-dot", - 22, - "22", - "star-diamond", - 122, - "122", - "star-diamond-open", - 222, - "222", - "star-diamond-dot", - 322, - "322", - "star-diamond-open-dot", - 23, - "23", - "diamond-tall", - 123, - "123", - "diamond-tall-open", - 223, - "223", - "diamond-tall-dot", - 323, - "323", - "diamond-tall-open-dot", - 24, - "24", - "diamond-wide", - 124, - "124", - "diamond-wide-open", - 224, - "224", - "diamond-wide-dot", - 324, - "324", - "diamond-wide-open-dot", - 25, - "25", - "hourglass", - 125, - "125", - "hourglass-open", - 26, - "26", - "bowtie", - 126, - "126", - "bowtie-open", - 27, - "27", - "circle-cross", - 127, - "127", - "circle-cross-open", - 28, - "28", - "circle-x", - 128, - "128", - "circle-x-open", - 29, - "29", - "square-cross", - 129, - "129", - "square-cross-open", - 30, - "30", - "square-x", - 130, - "130", - "square-x-open", - 31, - "31", - "diamond-cross", - 131, - "131", - "diamond-cross-open", - 32, - "32", - "diamond-x", - 132, - "132", - "diamond-x-open", - 33, - "33", - "cross-thin", - 133, - "133", - "cross-thin-open", - 34, - "34", - "x-thin", - 134, - "134", - "x-thin-open", - 35, - "35", - "asterisk", - 135, - "135", - "asterisk-open", - 36, - "36", - "hash", - 136, - "136", - "hash-open", - 236, - "236", - "hash-dot", - 336, - "336", - "hash-open-dot", - 37, - "37", - "y-up", - 137, - "137", - "y-up-open", - 38, - "38", - "y-down", - 138, - "138", - "y-down-open", - 39, - "39", - "y-left", - 139, - "139", - "y-left-open", - 40, - "40", - "y-right", - 140, - "140", - "y-right-open", - 41, - "41", - "line-ew", - 141, - "141", - "line-ew-open", - 42, - "42", - "line-ns", - 142, - "142", - "line-ns-open", - 43, - "43", - "line-ne", - 143, - "143", - "line-ne-open", - 44, - "44", - "line-nw", - 144, - "144", - "line-nw-open", - 45, - "45", - "arrow-up", - 145, - "145", - "arrow-up-open", - 46, - "46", - "arrow-down", - 146, - "146", - "arrow-down-open", - 47, - "47", - "arrow-left", - 147, - "147", - "arrow-left-open", - 48, - "48", - "arrow-right", - 148, - "148", - "arrow-right-open", - 49, - "49", - "arrow-bar-up", - 149, - "149", - "arrow-bar-up-open", - 50, - "50", - "arrow-bar-down", - 150, - "150", - "arrow-bar-down-open", - 51, - "51", - "arrow-bar-left", - 151, - "151", - "arrow-bar-left-open", - 52, - "52", - "arrow-bar-right", - 152, - "152", - "arrow-bar-right-open", - 53, - "53", - "arrow", - 153, - "153", - "arrow-open", - 54, - "54", - "arrow-wide", - 154, - "154", - "arrow-wide-open" - ] - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "real": { - "description": "Sets the real component of the data, in units of normalized impedance such that real=1, imag=0 is the center of the chart.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "realsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `real`.", - "editType": "none", - "valType": "string" - }, - "selected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a smith subplot. If *smith* (the default value), the data refer to `layout.smith`. If *smith2*, the data refer to `layout.smith2`, and so on.", - "dflt": "smith", - "editType": "calc", - "valType": "subplotid" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (x,y) pair. If a single string, the same string appears over all the data points. If an array of string, the items are mapped in order to the this trace's (x,y) coordinates. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "style", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the text font.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "textposition": { - "arrayOk": true, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `real`, `imag` and `text`.", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "type": "scattersmith", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "smith", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The scattersmith trace type encompasses line charts, scatter charts, text charts, and bubble charts in smith coordinates. The data visualized as scatter point or lines is set in `real` and `imag` (imaginary) coordinates Text (appearing either on the chart or on hover only) is via `text`. Bubble charts are achieved by setting `marker.size` and/or `marker.color` to numerical arrays.", - "hrName": "scatter_smith" - }, - "type": "scattersmith" - }, - "scatterternary": { - "animatable": false, - "attributes": { - "a": { - "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", - "editType": "calc", - "valType": "data_array" - }, - "asrc": { - "description": "Sets the source reference on Chart Studio Cloud for `a`.", - "editType": "none", - "valType": "string" - }, - "b": { - "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", - "editType": "calc", - "valType": "data_array" - }, - "bsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `b`.", - "editType": "none", - "valType": "string" - }, - "c": { - "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary.sum`.", - "editType": "calc", - "valType": "data_array" - }, - "cliponaxis": { - "description": "Determines whether or not markers and text nodes are clipped about the subplot axes. To show markers and text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*.", - "dflt": true, - "editType": "plot", - "valType": "boolean" - }, - "connectgaps": { - "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "csrc": { - "description": "Sets the source reference on Chart Studio Cloud for `c`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "fill": { - "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. scatterternary has a subset of the options available to scatter. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape. *tonext* fills the space between two traces if one completely encloses the other (eg consecutive contour lines), and behaves like *toself* if there is no trace before it. *tonext* should not be used if one trace does not enclose the other.", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "toself", - "tonext" - ] - }, - "fillcolor": { - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available.", - "editType": "style", - "valType": "color" - }, - "hoverinfo": { - "arrayOk": true, - "description": "Determines which trace information appear on hover. If `none` or `skip` are set, no information is displayed upon hovering. But, if `none` is set, click and hover events are still fired.", - "dflt": "all", - "editType": "none", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "a", - "b", - "c", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { - "arrayOk": true, - "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines", - "dflt": "auto", - "editType": "none", - "valType": "enumerated", - "values": [ - "left", - "right", - "auto" - ] - }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", - "editType": "none", - "valType": "string" - }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" - }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", - "editType": "none", - "valType": "string" - }, - "bordercolor": { - "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", - "editType": "none", - "valType": "color" - }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", - "editType": "none", - "valType": "string" - }, - "editType": "none", - "font": { - "color": { - "arrayOk": true, - "editType": "none", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the font used in hover labels.", - "editType": "none", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "none", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "none", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "none", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "none", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "none", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "none", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "namelength": { - "arrayOk": true, - "description": "Sets the default length (in number of characters) of the trace name in the hover labels for all traces. -1 shows the whole name regardless of length. 0-3 shows the first 0-3 characters, and an integer >3 will show the whole name if it is less than that many characters, but if it is longer, will truncate to `namelength - 3` characters and add an ellipsis.", - "dflt": 15, - "editType": "none", - "min": -1, - "valType": "integer" - }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", - "editType": "none", - "valType": "string" - }, - "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" - } - }, - "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*.", - "editType": "style", - "flags": [ - "points", - "fills" - ], - "valType": "flaglist" - }, - "hovertemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\" as well as %{xother}, {%_xother}, {%_xother_}, {%xother_}. When showing info for several points, *xother* will be added to those with different x positions from the first point. An underscore before or after *(x|y)other* will add a space on that side, only when this field is shown. Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plotly.com/javascript/plotlyjs-events/#event-data. Additionally, all attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Anything contained in tag `` is displayed in the secondary box, for example `%{fullData.name}`. To hide the secondary box completely, use an empty tag ``.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "hovertemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "none", - "valType": "any" - }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", - "editType": "none", - "valType": "string" - }, - "hovertext": { - "arrayOk": true, - "description": "Sets hover text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c). To be seen, trace `hoverinfo` must contain a *text* flag.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "hovertextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertext`.", - "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.", - "editType": "calc", - "valType": "data_array" - }, - "idssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ids`.", - "editType": "none", - "valType": "string" - }, - "legend": { - "description": "Sets the reference to a legend to show this trace in. References to these legends are *legend*, *legend2*, *legend3*, etc. Settings for these legends are set in the layout, under `layout.legend`, `layout.legend2`, etc.", - "dflt": "legend", - "editType": "style", - "valType": "subplotid" - }, - "legendgroup": { - "description": "Sets the legend group for this trace. Traces and shapes part of the same legend group hide/show at the same time when toggling legend items.", - "dflt": "", - "editType": "style", - "valType": "string" - }, - "legendgrouptitle": { - "editType": "style", - "font": { - "color": { - "editType": "style", - "valType": "color" - }, - "description": "Sets this legend group's title font.", - "editType": "style", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "style", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "style", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "style", - "valType": "string" - }, - "size": { - "editType": "style", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "style", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "style", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", - "valType": "string" - } - }, - "legendrank": { - "description": "Sets the legend rank for this trace. Items and groups with smaller ranks are presented on top/left side while with *reversed* `legend.traceorder` they are on bottom/right side. The default legendrank is 1000, so that you can use ranks less than 1000 to place certain items before all unranked items, and ranks greater than 1000 to go after all unranked items. When having unranked or equal rank items shapes would be displayed after traces i.e. according to their order in data and layout.", - "dflt": 1000, - "editType": "style", - "valType": "number" - }, - "legendwidth": { - "description": "Sets the width (in px or fraction) of the legend for this trace.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "line": { - "backoff": { - "arrayOk": true, - "description": "Sets the line back off from the end point of the nth line segment (in px). This option is useful e.g. to avoid overlap with arrowhead markers. With *auto* the lines would trim before markers if `marker.angleref` is set to *previous*.", - "dflt": "auto", - "editType": "plot", - "min": 0, - "valType": "number" - }, - "backoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `backoff`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the line color.", - "editType": "style", - "valType": "color" - }, - "dash": { - "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", - "dflt": "solid", - "editType": "style", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ] - }, - "editType": "calc", - "role": "object", - "shape": { - "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes.", - "dflt": "linear", - "editType": "plot", - "valType": "enumerated", - "values": [ - "linear", - "spline" - ] - }, - "smoothing": { - "description": "Has an effect only if `shape` is set to *spline* Sets the amount of smoothing. *0* corresponds to no smoothing (equivalent to a *linear* shape).", - "dflt": 1, - "editType": "plot", - "max": 1.3, - "min": 0, - "valType": "number" - }, - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "marker": { - "angle": { - "arrayOk": true, - "description": "Sets the marker angle in respect to `angleref`.", - "dflt": 0, - "editType": "plot", - "valType": "angle" - }, - "angleref": { - "description": "Sets the reference for marker angle. With *previous*, angle 0 points along the line from the previous point to this one. With *up*, angle 0 points toward the top of the screen.", - "dflt": "up", - "editType": "plot", - "valType": "enumerated", - "values": [ - "previous", - "up" - ] - }, - "anglesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `angle`.", - "editType": "none", - "valType": "string" - }, - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.colorscale`. Has an effect only if in `marker.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.color`) or the bounds set in `marker.cmin` and `marker.cmax` Has an effect only if in `marker.color` is set to a numerical array. Defaults to `false` when `marker.cmin` and `marker.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.color` is set to a numerical array. Value should have the same units as in `marker.color` and if set, `marker.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.cmin` and `marker.cmax` if set.", - "editType": "style", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorbar": { - "bgcolor": { - "description": "Sets the color of padded area.", - "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", - "valType": "color" - }, - "bordercolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "borderwidth": { - "description": "Sets the width (in px) or the border enclosing this color bar.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "dtick": { - "description": "Sets the step in-between ticks on this axis. Use with `tick0`. Must be a positive number, or special strings available to *log* and *date* axes. If the axis `type` is *log*, then ticks are set every 10^(n*dtick) where n is the tick number. For example, to set a tick mark at 1, 10, 100, 1000, ... set dtick to 1. To set tick marks at 1, 100, 10000, ... set dtick to 2. To set tick marks at 1, 5, 25, 125, 625, 3125, ... set dtick to log_10(5), or 0.69897000433. *log* has several special values; *L*, where `f` is a positive number, gives ticks linearly spaced in value (but not position). For example `tick0` = 0.1, `dtick` = *L0.5* will put ticks at 0.1, 0.6, 1.1, 1.6 etc. To show powers of 10 plus small digits between, use *D1* (all digits) or *D2* (only 2 and 5). `tick0` is ignored for *D1* and *D2*. If the axis `type` is *date*, then you must convert the time to milliseconds. For example, to set the interval between ticks to one day, set `dtick` to 86400000.0. *date* also has special values *M* gives ticks spaced by a number of months. `n` must be a positive integer. To set ticks on the 15th of every third month, set `tick0` to *2000-01-15* and `dtick` to *M3*. To set ticks every 4 years, set `dtick` to *M48*", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "editType": "colorbars", - "exponentformat": { - "description": "Determines a formatting rule for the tick exponents. For example, consider the number 1,000,000,000. If *none*, it appears as 1,000,000,000. If *e*, 1e+9. If *E*, 1E+9. If *power*, 1x10^9 (with 9 in a super script). If *SI*, 1G. If *B*, 1B. *SI* uses prefixes from \"femto\" f (10^-15) to \"tera\" T (10^12). *SI extended* covers instead the full SI range from \"quecto\" q (10^-30) to \"quetta\" Q (10^30). If *SI* or *SI extended* is used and the exponent is beyond the above ranges, the formatting rule will automatically be switched to the power notation.", - "dflt": "B", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "none", - "e", - "E", - "power", - "SI", - "B", - "SI extended" - ] - }, - "labelalias": { - "description": "Replacement text for specific tick or hover labels. For example using {US: 'USA', CA: 'Canada'} changes US to USA and CA to Canada. The labels we would have shown must match the keys exactly, after adding any tickprefix or ticksuffix. For negative numbers the minus sign symbol used (U+2212) is wider than the regular ascii dash. That means you need to use −1 instead of -1. labelalias can be used with any axis type, and both keys (if needed) and values (if desired) can include html-like tags or MathJax.", - "dflt": false, - "editType": "colorbars", - "valType": "any" - }, - "len": { - "description": "Sets the length of the color bar This measure excludes the padding of both ends. That is, the color bar length is this length minus the padding on both ends.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "lenmode": { - "description": "Determines whether this color bar's length (i.e. the measure in the color variation direction) is set in units of plot *fraction* or in *pixels. Use `len` to set the value.", - "dflt": "fraction", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "minexponent": { - "description": "Hide SI prefix for 10^n if |n| is below this number. This only has an effect when `tickformat` is *SI* or *B*.", - "dflt": 3, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "nticks": { - "description": "Specifies the maximum number of ticks for the particular axis. The actual number of ticks will be chosen automatically to be less than or equal to `nticks`. Has an effect only if `tickmode` is set to *auto*.", - "dflt": 0, - "editType": "colorbars", - "min": 0, - "valType": "integer" - }, - "orientation": { - "description": "Sets the orientation of the colorbar.", - "dflt": "v", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "h", - "v" - ] - }, - "outlinecolor": { - "description": "Sets the axis line color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "outlinewidth": { - "description": "Sets the width (in px) of the axis line.", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "role": "object", - "separatethousands": { - "description": "If \"true\", even 4-digit integers are separated", - "dflt": false, - "editType": "colorbars", - "valType": "boolean" - }, - "showexponent": { - "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticklabels": { - "description": "Determines whether or not the tick labels are drawn.", - "dflt": true, - "editType": "colorbars", - "valType": "boolean" - }, - "showtickprefix": { - "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "showticksuffix": { - "description": "Same as `showtickprefix` but for tick suffixes.", - "dflt": "all", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "all", - "first", - "last", - "none" - ] - }, - "thickness": { - "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", - "dflt": 30, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "thicknessmode": { - "description": "Determines whether this color bar's thickness (i.e. the measure in the constant color direction) is set in units of plot *fraction* or in *pixels*. Use `thickness` to set the value.", - "dflt": "pixels", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "fraction", - "pixels" - ] - }, - "tick0": { - "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", - "editType": "colorbars", - "impliedEdits": { - "tickmode": "linear" - }, - "valType": "any" - }, - "tickangle": { - "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", - "dflt": "auto", - "editType": "colorbars", - "valType": "angle" - }, - "tickcolor": { - "description": "Sets the tick color.", - "dflt": "#444", - "editType": "colorbars", - "valType": "color" - }, - "tickfont": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets the color bar's tick label font", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "tickformat": { - "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "tickformatstops": { - "items": { - "tickformatstop": { - "dtickrange": { - "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", - "editType": "colorbars", - "items": [ - { - "editType": "colorbars", - "valType": "any" - }, - { - "editType": "colorbars", - "valType": "any" - } - ], - "valType": "info_array" - }, - "editType": "colorbars", - "enabled": { - "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "rangeselector": { + "activecolor": { + "description": "Sets the background color of the active range selector button.", + "editType": "plot", + "valType": "color" + }, + "bgcolor": { + "description": "Sets the background color of the range selector buttons.", + "dflt": "#eee", + "editType": "plot", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the color of the border enclosing the range selector.", + "dflt": "#444", + "editType": "plot", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the width (in px) of the border enclosing the range selector.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "buttons": { + "items": { + "button": { + "count": { + "description": "Sets the number of steps to take to update the range. Use with `step` to specify the update interval.", + "dflt": 1, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "description": "Sets the specifications for each buttons. By default, a range selector comes with no buttons.", + "editType": "plot", + "label": { + "description": "Sets the text label to appear on the button.", + "editType": "plot", + "valType": "string" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "step": { + "description": "The unit of measurement that the `count` value will set the range by.", + "dflt": "month", + "editType": "plot", + "valType": "enumerated", + "values": [ + "month", + "year", + "day", + "hour", + "minute", + "second", + "all" + ] + }, + "stepmode": { + "description": "Sets the range update mode. If *backward*, the range update shifts the start of range back *count* times *step* milliseconds. If *todate*, the range update shifts the start of range back to the first timestamp from *count* times *step* milliseconds back. For example, with `step` set to *year* and `count` set to *1* the range update shifts the start of the range back to January 01 of the current year. Month and year *todate* are currently available only for the built-in (Gregorian) calendar.", + "dflt": "backward", + "editType": "plot", + "valType": "enumerated", + "values": [ + "backward", + "todate" + ] + }, + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "visible": { + "description": "Determines whether or not this button is visible.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + } + } + }, + "role": "object" + }, + "editType": "plot", + "font": { + "color": { + "editType": "plot", + "valType": "color" + }, + "description": "Sets the font of the range selector button text.", + "editType": "plot", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "plot", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "plot", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "plot", + "valType": "string" + }, + "size": { + "editType": "plot", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "plot", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "plot", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "visible": { + "description": "Determines whether or not this range selector is visible. Note that range selectors are only available for x axes of `type` set to or auto-typed to *date*.", + "editType": "plot", + "valType": "boolean" + }, + "x": { + "description": "Sets the x position (in normalized coordinates) of the range selector.", + "editType": "plot", + "max": 3, + "min": -2, + "valType": "number" + }, + "xanchor": { + "description": "Sets the range selector's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the range selector.", + "dflt": "left", + "editType": "plot", + "valType": "enumerated", + "values": [ + "auto", + "left", + "center", + "right" + ] + }, + "y": { + "description": "Sets the y position (in normalized coordinates) of the range selector.", + "editType": "plot", + "max": 3, + "min": -2, + "valType": "number" + }, + "yanchor": { + "description": "Sets the range selector's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the range selector.", + "dflt": "bottom", + "editType": "plot", + "valType": "enumerated", + "values": [ + "auto", + "top", + "middle", + "bottom" + ] + } + }, + "rangeslider": { + "autorange": { + "description": "Determines whether or not the range slider range is computed in relation to the input data. If `range` is provided, then `autorange` is set to *false*.", + "dflt": true, + "editType": "calc", + "impliedEdits": {}, + "valType": "boolean" + }, + "bgcolor": { + "description": "Sets the background color of the range slider.", + "dflt": "#fff", + "editType": "plot", + "valType": "color" + }, + "bordercolor": { + "description": "Sets the border color of the range slider.", + "dflt": "#444", + "editType": "plot", + "valType": "color" + }, + "borderwidth": { + "description": "Sets the border width of the range slider.", + "dflt": 0, + "editType": "plot", + "min": 0, + "valType": "integer" + }, + "editType": "calc", + "range": { + "description": "Sets the range of the range slider. If not set, defaults to the full xaxis range. If the axis `type` is *log*, then you must take the log of your desired range. If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "calc", + "impliedEdits": { + "autorange": false + }, + "items": [ + { + "editType": "calc", + "impliedEdits": { + "^autorange": false + }, + "valType": "any" + }, + { + "editType": "calc", + "impliedEdits": { + "^autorange": false + }, + "valType": "any" + } + ], + "valType": "info_array" + }, + "role": "object", + "thickness": { + "description": "The height of the range slider as a fraction of the total plot area height.", + "dflt": 0.15, + "editType": "plot", + "max": 1, + "min": 0, + "valType": "number" + }, + "visible": { + "description": "Determines whether or not the range slider will be visible. If visible, perpendicular axes will be set to `fixedrange`", + "dflt": true, + "editType": "calc", + "valType": "boolean" + }, + "yaxis": { + "_isSubplotObj": true, + "editType": "calc", + "range": { + "description": "Sets the range of this axis for the rangeslider.", + "editType": "plot", + "items": [ + { + "editType": "plot", + "valType": "any" + }, + { + "editType": "plot", + "valType": "any" + } + ], + "valType": "info_array" + }, + "rangemode": { + "description": "Determines whether or not the range of this axis in the rangeslider use the same value than in the main plot when zooming in/out. If *auto*, the autorange will be used. If *fixed*, the `range` is used. If *match*, the current range of the corresponding y-axis on the main subplot is used.", + "dflt": "match", + "editType": "calc", + "valType": "enumerated", + "values": [ + "auto", + "fixed", + "match" + ] + }, + "role": "object" + } + }, + "role": "object", + "scaleanchor": { + "description": "If set to another axis id (e.g. `x2`, `y`), the range of this axis changes together with the range of the corresponding axis such that the scale of pixels per unit is in a constant ratio. Both axes are still zoomable, but when you zoom one, the other will zoom the same amount, keeping a fixed midpoint. `constrain` and `constraintoward` determine how we enforce the constraint. You can chain these, ie `yaxis: {scaleanchor: *x*}, xaxis2: {scaleanchor: *y*}` but you can only link axes of the same `type`. The linked axis can have the opposite letter (to constrain the aspect ratio) or the same letter (to match scales across subplots). Loops (`yaxis: {scaleanchor: *x*}, xaxis: {scaleanchor: *y*}` or longer) are redundant and the last constraint encountered will be ignored to avoid possible inconsistent constraints via `scaleratio`. Note that setting axes simultaneously in both a `scaleanchor` and a `matches` constraint is currently forbidden. Setting `false` allows to remove a default constraint (occasionally, you may need to prevent a default `scaleanchor` constraint from being applied, eg. when having an image trace `yaxis: {scaleanchor: \"x\"}` is set automatically in order for pixels to be rendered as squares, setting `yaxis: {scaleanchor: false}` allows to remove the constraint).", + "editType": "plot", + "valType": "enumerated", + "values": [ + "/^x([2-9]|[1-9][0-9]+)?( domain)?$/", + "/^y([2-9]|[1-9][0-9]+)?( domain)?$/", + false + ] + }, + "scaleratio": { + "description": "If this axis is linked to another by `scaleanchor`, this determines the pixel to unit scale ratio. For example, if this value is 10, then every unit on this axis spans 10 times the number of pixels as a unit on the linked axis. Use this for example to create an elevation profile where the vertical scale is exaggerated a fixed amount with respect to the horizontal.", + "dflt": 1, + "editType": "plot", + "min": 0, + "valType": "number" + }, + "separatethousands": { + "description": "If \"true\", even 4-digit integers are separated", + "dflt": false, + "editType": "ticks", + "valType": "boolean" + }, + "showdividers": { + "description": "Determines whether or not a dividers are drawn between the category levels of this axis. Only has an effect on *multicategory* axes.", "dflt": true, - "editType": "colorbars", + "editType": "ticks", "valType": "boolean" - }, - "name": { - "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", - "editType": "colorbars", - "valType": "string" - }, - "role": "object", - "templateitemname": { - "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", - "editType": "colorbars", - "valType": "string" - }, - "value": { - "description": "string - dtickformat for described zoom level, the same as *tickformat*", + }, + "showexponent": { + "description": "If *all*, all exponents are shown besides their significands. If *first*, only the exponent of the first tick is shown. If *last*, only the exponent of the last tick is shown. If *none*, no exponents appear.", + "dflt": "all", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showgrid": { + "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.", + "editType": "ticks", + "valType": "boolean" + }, + "showline": { + "description": "Determines whether or not a line bounding this axis is drawn.", + "dflt": false, + "editType": "ticks+layoutstyle", + "valType": "boolean" + }, + "showspikes": { + "description": "Determines whether or not spikes (aka droplines) are drawn for this axis. Note: This only takes affect when hovermode = closest", + "dflt": false, + "editType": "modebar", + "valType": "boolean" + }, + "showticklabels": { + "description": "Determines whether or not the tick labels are drawn.", + "dflt": true, + "editType": "ticks", + "valType": "boolean" + }, + "showtickprefix": { + "description": "If *all*, all tick labels are displayed with a prefix. If *first*, only the first tick is displayed with a prefix. If *last*, only the last tick is displayed with a suffix. If *none*, tick prefixes are hidden.", + "dflt": "all", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "showticksuffix": { + "description": "Same as `showtickprefix` but for tick suffixes.", + "dflt": "all", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "all", + "first", + "last", + "none" + ] + }, + "side": { + "description": "Determines whether a x (y) axis is positioned at the *bottom* (*left*) or *top* (*right*) of the plotting area.", + "editType": "plot", + "valType": "enumerated", + "values": [ + "top", + "bottom", + "left", + "right" + ] + }, + "spikecolor": { + "description": "Sets the spike color. If undefined, will use the series color", + "dflt": null, + "editType": "none", + "valType": "color" + }, + "spikedash": { + "description": "Sets the dash style of lines. Set to a dash type string (*solid*, *dot*, *dash*, *longdash*, *dashdot*, or *longdashdot*) or a dash length list in px (eg *5px,10px,2px,2px*).", + "dflt": "dash", + "editType": "none", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, + "spikemode": { + "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on", + "dflt": "toaxis", + "editType": "none", + "flags": [ + "toaxis", + "across", + "marker" + ], + "valType": "flaglist" + }, + "spikesnap": { + "description": "Determines whether spikelines are stuck to the cursor or to the closest datapoints.", + "dflt": "hovered data", + "editType": "none", + "valType": "enumerated", + "values": [ + "data", + "cursor", + "hovered data" + ] + }, + "spikethickness": { + "description": "Sets the width (in px) of the zero line.", + "dflt": 3, + "editType": "none", + "valType": "number" + }, + "tick0": { + "description": "Sets the placement of the first tick on this axis. Use with `dtick`. If the axis `type` is *log*, then you must take the log of your starting tick (e.g. to set the starting tick to 100, set the `tick0` to 2) except when `dtick`=*L* (see `dtick` for more info). If the axis `type` is *date*, it should be a date string, like date data. If the axis `type` is *category*, it should be a number, using the scale where each category is assigned a serial number from zero in the order it appears.", + "editType": "ticks", + "impliedEdits": { + "tickmode": "linear" + }, + "valType": "any" + }, + "tickangle": { + "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically.", + "dflt": "auto", + "editType": "ticks", + "valType": "angle" + }, + "tickcolor": { + "description": "Sets the tick color.", + "dflt": "#444", + "editType": "ticks", + "valType": "color" + }, + "tickfont": { + "color": { + "editType": "ticks", + "valType": "color" + }, + "description": "Sets the tick font.", + "editType": "ticks", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "ticks", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "ticks", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "ticks", + "valType": "string" + }, + "size": { + "editType": "ticks", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "ticks", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "tickformat": { + "description": "Sets the tick label formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/tree/v1.4.5#d3-format. And for dates see: https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format. We add two items to d3's date formatter: *%h* for half of the year as a decimal number as well as *%{n}f* for fractional seconds with n digits. For example, *2016-10-13 09:15:23.456* with tickformat *%H~%M~%S.%2f* would display *09~15~23.46*", "dflt": "", - "editType": "colorbars", + "editType": "ticks", "valType": "string" - } - } - }, - "role": "object" - }, - "ticklabeloverflow": { - "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. In other cases the default is *hide past div*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "allow", - "hide past div", - "hide past domain" - ] - }, - "ticklabelposition": { - "description": "Determines where tick labels are drawn relative to the ticks. Left and right options are used when `orientation` is *h*, top and bottom when `orientation` is *v*.", - "dflt": "outside", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "outside top", - "inside top", - "outside left", - "inside left", - "outside right", - "inside right", - "outside bottom", - "inside bottom" - ] - }, - "ticklabelstep": { - "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", - "dflt": 1, - "editType": "colorbars", - "min": 1, - "valType": "integer" - }, - "ticklen": { - "description": "Sets the tick length (in px).", - "dflt": 5, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "tickmode": { - "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided).", - "editType": "colorbars", - "impliedEdits": {}, - "valType": "enumerated", - "values": [ - "auto", - "linear", - "array" - ] - }, - "tickprefix": { - "description": "Sets a tick label prefix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticks": { - "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", - "dflt": "", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "outside", - "inside", - "" - ] - }, - "ticksuffix": { - "description": "Sets a tick label suffix.", - "dflt": "", - "editType": "colorbars", - "valType": "string" - }, - "ticktext": { - "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", - "editType": "colorbars", - "valType": "data_array" - }, - "ticktextsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", - "editType": "none", - "valType": "string" - }, - "tickvals": { - "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", - "editType": "colorbars", - "valType": "data_array" - }, - "tickvalssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", - "editType": "none", - "valType": "string" - }, - "tickwidth": { - "description": "Sets the tick width (in px).", - "dflt": 1, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "title": { - "editType": "colorbars", - "font": { - "color": { - "editType": "colorbars", - "valType": "color" - }, - "description": "Sets this color bar's title font.", - "editType": "colorbars", - "family": { - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "colorbars", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "lineposition": { - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "colorbars", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" }, - "role": "object", - "shadow": { - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "colorbars", - "valType": "string" - }, - "size": { - "editType": "colorbars", - "min": 1, - "valType": "number" - }, - "style": { - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "textcase": { - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "variant": { - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "colorbars", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "role": "object", - "side": { - "description": "Determines the location of color bar's title with respect to the color bar. Defaults to *top* when `orientation` if *v* and defaults to *right* when `orientation` if *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "right", - "top", - "bottom" - ] - }, - "text": { - "description": "Sets the title of the color bar.", - "editType": "colorbars", - "valType": "string" - } - }, - "x": { - "description": "Sets the x position with respect to `xref` of the color bar (in plot fraction). When `xref` is *paper*, defaults to 1.02 when `orientation` is *v* and 0.5 when `orientation` is *h*. When `xref` is *container*, defaults to *1* when `orientation` is *v* and 0.5 when `orientation` is *h*. Must be between *0* and *1* if `xref` is *container* and between *-2* and *3* if `xref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "xanchor": { - "description": "Sets this color bar's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the color bar. Defaults to *left* when `orientation` is *v* and *center* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "left", - "center", - "right" - ] - }, - "xpad": { - "description": "Sets the amount of padding (in px) along the x direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "xref": { - "description": "Sets the container `x` refers to. *container* spans the entire `width` of the plot. *paper* refers to the width of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - }, - "y": { - "description": "Sets the y position with respect to `yref` of the color bar (in plot fraction). When `yref` is *paper*, defaults to 0.5 when `orientation` is *v* and 1.02 when `orientation` is *h*. When `yref` is *container*, defaults to 0.5 when `orientation` is *v* and 1 when `orientation` is *h*. Must be between *0* and *1* if `yref` is *container* and between *-2* and *3* if `yref` is *paper*.", - "editType": "colorbars", - "valType": "number" - }, - "yanchor": { - "description": "Sets this color bar's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the color bar. Defaults to *middle* when `orientation` is *v* and *bottom* when `orientation` is *h*.", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "top", - "middle", - "bottom" - ] - }, - "ypad": { - "description": "Sets the amount of padding (in px) along the y direction.", - "dflt": 10, - "editType": "colorbars", - "min": 0, - "valType": "number" - }, - "yref": { - "description": "Sets the container `y` refers to. *container* spans the entire `height` of the plot. *paper* refers to the height of the plotting area only.", - "dflt": "paper", - "editType": "colorbars", - "valType": "enumerated", - "values": [ - "container", - "paper" - ] - } - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.cmin` and `marker.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "gradient": { - "color": { - "arrayOk": true, - "description": "Sets the final color of the gradient fill: the center color for radial, the right for horizontal, or the bottom for vertical.", - "editType": "calc", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "role": "object", - "type": { - "arrayOk": true, - "description": "Sets the type of gradient used to fill the markers", - "dflt": "none", - "editType": "calc", - "valType": "enumerated", - "values": [ - "radial", - "horizontal", - "vertical", - "none" - ] - }, - "typesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `type`.", - "editType": "none", - "valType": "string" - } - }, - "line": { - "autocolorscale": { - "description": "Determines whether the colorscale is a default palette (`autocolorscale: true`) or the palette determined by `marker.line.colorscale`. Has an effect only if in `marker.line.color` is set to a numerical array. In case `colorscale` is unspecified or `autocolorscale` is true, the default palette will be chosen according to whether numbers in the `color` array are all positive, all negative or mixed.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cauto": { - "description": "Determines whether or not the color domain is computed with respect to the input data (here in `marker.line.color`) or the bounds set in `marker.line.cmin` and `marker.line.cmax` Has an effect only if in `marker.line.color` is set to a numerical array. Defaults to `false` when `marker.line.cmin` and `marker.line.cmax` are set by the user.", - "dflt": true, - "editType": "calc", - "impliedEdits": {}, - "valType": "boolean" - }, - "cmax": { - "description": "Sets the upper bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmin` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "cmid": { - "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`.", - "dflt": null, - "editType": "calc", - "impliedEdits": {}, - "valType": "number" - }, - "cmin": { - "description": "Sets the lower bound of the color domain. Has an effect only if in `marker.line.color` is set to a numerical array. Value should have the same units as in `marker.line.color` and if set, `marker.line.cmax` must be set as well.", - "dflt": null, - "editType": "plot", - "impliedEdits": { - "cauto": false - }, - "valType": "number" - }, - "color": { - "arrayOk": true, - "description": "Sets the marker.line color. It accepts either a specific color or an array of numbers that are mapped to the colorscale relative to the max and min values of the array or relative to `marker.line.cmin` and `marker.line.cmax` if set.", - "editType": "style", - "valType": "color" - }, - "coloraxis": { - "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis.", - "dflt": null, - "editType": "calc", - "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/", - "valType": "subplotid" - }, - "colorscale": { - "description": "Sets the colorscale. Has an effect only if in `marker.line.color` is set to a numerical array. The colorscale must be an array containing arrays mapping a normalized value to an rgb, rgba, hex, hsl, hsv, or named color string. At minimum, a mapping for the lowest (0) and highest (1) values are required. For example, `[[0, 'rgb(0,0,255)'], [1, 'rgb(255,0,0)']]`. To control the bounds of the colorscale in color space, use `marker.line.cmin` and `marker.line.cmax`. Alternatively, `colorscale` may be a palette name string of the following list: Blackbody,Bluered,Blues,Cividis,Earth,Electric,Greens,Greys,Hot,Jet,Picnic,Portland,Rainbow,RdBu,Reds,Viridis,YlGnBu,YlOrRd.", - "dflt": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.line.color` is set to a numerical array. If true, `marker.line.cmin` will correspond to the last color in the array and `marker.line.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "style", - "min": 0, - "valType": "number" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - } - }, - "maxdisplayed": { - "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "opacity": { - "arrayOk": true, - "description": "Sets the marker opacity.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "opacitysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `opacity`.", - "editType": "none", - "valType": "string" - }, - "reversescale": { - "description": "Reverses the color mapping if true. Has an effect only if in `marker.color` is set to a numerical array. If true, `marker.cmin` will correspond to the last color in the array and `marker.cmax` will correspond to the first color.", - "dflt": false, - "editType": "plot", - "valType": "boolean" - }, - "role": "object", - "showscale": { - "description": "Determines whether or not a colorbar is displayed for this trace. Has an effect only if in `marker.color` is set to a numerical array.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - }, - "size": { - "arrayOk": true, - "description": "Sets the marker size (in px).", - "dflt": 6, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemin": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the minimum size (in px) of the rendered marker points.", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "sizemode": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the rule for which the data in `size` is converted to pixels.", - "dflt": "diameter", - "editType": "calc", - "valType": "enumerated", - "values": [ - "diameter", - "area" - ] - }, - "sizeref": { - "description": "Has an effect only if `marker.size` is set to a numerical array. Sets the scale factor used to determine the rendered size of marker points. Use with `sizemin` and `sizemode`.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "standoff": { - "arrayOk": true, - "description": "Moves the marker away from the data point in the direction of `angle` (in px). This can be useful for example if you have another marker at this location and you want to point an arrowhead marker at it.", - "dflt": 0, - "editType": "plot", - "min": 0, - "valType": "number" - }, - "standoffsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `standoff`.", - "editType": "none", - "valType": "string" - }, - "symbol": { - "arrayOk": true, - "description": "Sets the marker symbol type. Adding 100 is equivalent to appending *-open* to a symbol name. Adding 200 is equivalent to appending *-dot* to a symbol name. Adding 300 is equivalent to appending *-open-dot* or *dot-open* to a symbol name.", - "dflt": "circle", - "editType": "style", - "valType": "enumerated", - "values": [ - 0, - "0", - "circle", - 100, - "100", - "circle-open", - 200, - "200", - "circle-dot", - 300, - "300", - "circle-open-dot", - 1, - "1", - "square", - 101, - "101", - "square-open", - 201, - "201", - "square-dot", - 301, - "301", - "square-open-dot", - 2, - "2", - "diamond", - 102, - "102", - "diamond-open", - 202, - "202", - "diamond-dot", - 302, - "302", - "diamond-open-dot", - 3, - "3", - "cross", - 103, - "103", - "cross-open", - 203, - "203", - "cross-dot", - 303, - "303", - "cross-open-dot", - 4, - "4", - "x", - 104, - "104", - "x-open", - 204, - "204", - "x-dot", - 304, - "304", - "x-open-dot", - 5, - "5", - "triangle-up", - 105, - "105", - "triangle-up-open", - 205, - "205", - "triangle-up-dot", - 305, - "305", - "triangle-up-open-dot", - 6, - "6", - "triangle-down", - 106, - "106", - "triangle-down-open", - 206, - "206", - "triangle-down-dot", - 306, - "306", - "triangle-down-open-dot", - 7, - "7", - "triangle-left", - 107, - "107", - "triangle-left-open", - 207, - "207", - "triangle-left-dot", - 307, - "307", - "triangle-left-open-dot", - 8, - "8", - "triangle-right", - 108, - "108", - "triangle-right-open", - 208, - "208", - "triangle-right-dot", - 308, - "308", - "triangle-right-open-dot", - 9, - "9", - "triangle-ne", - 109, - "109", - "triangle-ne-open", - 209, - "209", - "triangle-ne-dot", - 309, - "309", - "triangle-ne-open-dot", - 10, - "10", - "triangle-se", - 110, - "110", - "triangle-se-open", - 210, - "210", - "triangle-se-dot", - 310, - "310", - "triangle-se-open-dot", - 11, - "11", - "triangle-sw", - 111, - "111", - "triangle-sw-open", - 211, - "211", - "triangle-sw-dot", - 311, - "311", - "triangle-sw-open-dot", - 12, - "12", - "triangle-nw", - 112, - "112", - "triangle-nw-open", - 212, - "212", - "triangle-nw-dot", - 312, - "312", - "triangle-nw-open-dot", - 13, - "13", - "pentagon", - 113, - "113", - "pentagon-open", - 213, - "213", - "pentagon-dot", - 313, - "313", - "pentagon-open-dot", - 14, - "14", - "hexagon", - 114, - "114", - "hexagon-open", - 214, - "214", - "hexagon-dot", - 314, - "314", - "hexagon-open-dot", - 15, - "15", - "hexagon2", - 115, - "115", - "hexagon2-open", - 215, - "215", - "hexagon2-dot", - 315, - "315", - "hexagon2-open-dot", - 16, - "16", - "octagon", - 116, - "116", - "octagon-open", - 216, - "216", - "octagon-dot", - 316, - "316", - "octagon-open-dot", - 17, - "17", - "star", - 117, - "117", - "star-open", - 217, - "217", - "star-dot", - 317, - "317", - "star-open-dot", - 18, - "18", - "hexagram", - 118, - "118", - "hexagram-open", - 218, - "218", - "hexagram-dot", - 318, - "318", - "hexagram-open-dot", - 19, - "19", - "star-triangle-up", - 119, - "119", - "star-triangle-up-open", - 219, - "219", - "star-triangle-up-dot", - 319, - "319", - "star-triangle-up-open-dot", - 20, - "20", - "star-triangle-down", - 120, - "120", - "star-triangle-down-open", - 220, - "220", - "star-triangle-down-dot", - 320, - "320", - "star-triangle-down-open-dot", - 21, - "21", - "star-square", - 121, - "121", - "star-square-open", - 221, - "221", - "star-square-dot", - 321, - "321", - "star-square-open-dot", - 22, - "22", - "star-diamond", - 122, - "122", - "star-diamond-open", - 222, - "222", - "star-diamond-dot", - 322, - "322", - "star-diamond-open-dot", - 23, - "23", - "diamond-tall", - 123, - "123", - "diamond-tall-open", - 223, - "223", - "diamond-tall-dot", - 323, - "323", - "diamond-tall-open-dot", - 24, - "24", - "diamond-wide", - 124, - "124", - "diamond-wide-open", - 224, - "224", - "diamond-wide-dot", - 324, - "324", - "diamond-wide-open-dot", - 25, - "25", - "hourglass", - 125, - "125", - "hourglass-open", - 26, - "26", - "bowtie", - 126, - "126", - "bowtie-open", - 27, - "27", - "circle-cross", - 127, - "127", - "circle-cross-open", - 28, - "28", - "circle-x", - 128, - "128", - "circle-x-open", - 29, - "29", - "square-cross", - 129, - "129", - "square-cross-open", - 30, - "30", - "square-x", - 130, - "130", - "square-x-open", - 31, - "31", - "diamond-cross", - 131, - "131", - "diamond-cross-open", - 32, - "32", - "diamond-x", - 132, - "132", - "diamond-x-open", - 33, - "33", - "cross-thin", - 133, - "133", - "cross-thin-open", - 34, - "34", - "x-thin", - 134, - "134", - "x-thin-open", - 35, - "35", - "asterisk", - 135, - "135", - "asterisk-open", - 36, - "36", - "hash", - 136, - "136", - "hash-open", - 236, - "236", - "hash-dot", - 336, - "336", - "hash-open-dot", - 37, - "37", - "y-up", - 137, - "137", - "y-up-open", - 38, - "38", - "y-down", - 138, - "138", - "y-down-open", - 39, - "39", - "y-left", - 139, - "139", - "y-left-open", - 40, - "40", - "y-right", - 140, - "140", - "y-right-open", - 41, - "41", - "line-ew", - 141, - "141", - "line-ew-open", - 42, - "42", - "line-ns", - 142, - "142", - "line-ns-open", - 43, - "43", - "line-ne", - 143, - "143", - "line-ne-open", - 44, - "44", - "line-nw", - 144, - "144", - "line-nw-open", - 45, - "45", - "arrow-up", - 145, - "145", - "arrow-up-open", - 46, - "46", - "arrow-down", - 146, - "146", - "arrow-down-open", - 47, - "47", - "arrow-left", - 147, - "147", - "arrow-left-open", - 48, - "48", - "arrow-right", - 148, - "148", - "arrow-right-open", - 49, - "49", - "arrow-bar-up", - 149, - "149", - "arrow-bar-up-open", - 50, - "50", - "arrow-bar-down", - 150, - "150", - "arrow-bar-down-open", - 51, - "51", - "arrow-bar-left", - 151, - "151", - "arrow-bar-left-open", - 52, - "52", - "arrow-bar-right", - 152, - "152", - "arrow-bar-right-open", - 53, - "53", - "arrow", - 153, - "153", - "arrow-open", - 54, - "54", - "arrow-wide", - 154, - "154", - "arrow-wide-open" - ] - }, - "symbolsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `symbol`.", - "editType": "none", - "valType": "string" - } - }, - "meta": { - "arrayOk": true, - "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index.", - "editType": "plot", - "valType": "any" - }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", - "editType": "none", - "valType": "string" - }, - "mode": { - "description": "Determines the drawing mode for this scatter trace. If the provided `mode` includes *text* then the `text` elements appear at the coordinates. Otherwise, the `text` elements appear on hover. If there are less than 20 points and the trace is not stacked then the default is *lines+markers*. Otherwise, *lines*.", - "dflt": "markers", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "lines", - "markers", - "text" - ], - "valType": "flaglist" - }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "selected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of selected points.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of selected points.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "selectedpoints": { - "description": "Array containing integer indices of selected points. Has an effect only for traces that support selections. Note that an empty array means an empty selection where the `unselected` are turned on for all points, whereas, any other non-array values means no selection all where the `selected` and `unselected` styles have no effect.", - "editType": "calc", - "valType": "any" - }, - "showlegend": { - "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", - "dflt": true, - "editType": "style", - "valType": "boolean" - }, - "stream": { - "editType": "calc", - "maxpoints": { - "description": "Sets the maximum number of points to keep on the plots from an incoming stream. If `maxpoints` is set to *50*, only the newest 50 points will be displayed on the plot.", - "dflt": 500, - "editType": "calc", - "max": 10000, - "min": 0, - "valType": "number" - }, - "role": "object", - "token": { - "description": "The stream id number links a data trace on a plot with a stream. See https://chart-studio.plotly.com/settings for more details.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - } - }, - "subplot": { - "description": "Sets a reference between this trace's data coordinates and a ternary subplot. If *ternary* (the default value), the data refer to `layout.ternary`. If *ternary2*, the data refer to `layout.ternary2`, and so on.", - "dflt": "ternary", - "editType": "calc", - "valType": "subplotid" - }, - "sum": { - "description": "The number each triplet should sum to, if only two of `a`, `b`, and `c` are provided. This overrides `ternary.sum` to normalize this specific trace, but does not affect the values displayed on the axes. 0 (or missing) means to use ternary.sum", - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c). If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "textfont": { - "color": { - "arrayOk": true, - "editType": "style", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "description": "Sets the text font.", - "editType": "calc", - "family": { - "arrayOk": true, - "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", - "editType": "calc", - "noBlank": true, - "strict": true, - "valType": "string" - }, - "familysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `family`.", - "editType": "none", - "valType": "string" - }, - "lineposition": { - "arrayOk": true, - "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", - "dflt": "none", - "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" - }, - "linepositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `lineposition`.", - "editType": "none", - "valType": "string" - }, - "role": "object", - "shadow": { - "arrayOk": true, - "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", - "dflt": "none", - "editType": "calc", - "valType": "string" - }, - "shadowsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `shadow`.", - "editType": "none", - "valType": "string" - }, - "size": { - "arrayOk": true, - "editType": "calc", - "min": 1, - "valType": "number" - }, - "sizesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `size`.", - "editType": "none", - "valType": "string" - }, - "style": { - "arrayOk": true, - "description": "Sets whether a font should be styled with a normal or italic face from its family.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "italic" - ] - }, - "stylesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `style`.", - "editType": "none", - "valType": "string" - }, - "textcase": { - "arrayOk": true, - "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "word caps", - "upper", - "lower" - ] - }, - "textcasesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", - "editType": "none", - "valType": "string" - }, - "variant": { - "arrayOk": true, - "description": "Sets the variant of the font.", - "dflt": "normal", - "editType": "calc", - "valType": "enumerated", - "values": [ - "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" - ] - }, - "variantsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `variant`.", - "editType": "none", - "valType": "string" - }, - "weight": { - "arrayOk": true, - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", - "editType": "calc", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" - } - }, - "textposition": { - "arrayOk": true, - "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", - "editType": "calc", - "valType": "enumerated", - "values": [ - "top left", - "top center", - "top right", - "middle left", - "middle center", - "middle right", - "bottom left", - "bottom center", - "bottom right" - ] - }, - "textpositionsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `textposition`.", - "editType": "none", - "valType": "string" - }, - "textsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `text`.", - "editType": "none", - "valType": "string" - }, - "texttemplate": { - "arrayOk": true, - "description": "Template string used for rendering the information text that appears on points. Note that this will override `textinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-format/tree/v1.4.5#d3-format for details on the formatting syntax. Dates are formatted using d3-time-format's syntax %{variable|d3-time-format}, for example \"Day: %{2019-01-01|%A}\". https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format for details on the date formatting syntax. Variables that can't be found will be replaced with the specifier. For example, a template of \"data: %{x}, %{y}\" will result in a value of \"data: 1, %{y}\" if x is 1 and y is missing. Variables with an undefined value will be replaced with the fallback value. All attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. Finally, the template string has access to variables `a`, `b`, `c` and `text`.", - "dflt": "", - "editType": "plot", - "valType": "string" - }, - "texttemplatefallback": { - "description": "Fallback string that's displayed when a variable referenced in a template is missing. If the boolean value 'false' is passed in, the specifier with the missing variable will be displayed.", - "dflt": "-", - "editType": "plot", - "valType": "any" - }, - "texttemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `texttemplate`.", - "editType": "none", - "valType": "string" - }, - "type": "scatterternary", - "uid": { - "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", - "editType": "plot", - "valType": "string" - }, - "uirevision": { - "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves.", - "editType": "none", - "valType": "any" - }, - "unselected": { - "editType": "style", - "marker": { - "color": { - "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "opacity": { - "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "size": { - "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "style", - "min": 0, - "valType": "number" - } - }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "style", - "valType": "color" - }, - "editType": "style", - "role": "object" - } - }, - "visible": { - "description": "Determines whether or not this trace is visible. If *legendonly*, the trace is not drawn, but can appear as a legend item (provided that the legend itself is visible).", - "dflt": true, - "editType": "calc", - "valType": "enumerated", - "values": [ - true, - false, - "legendonly" - ] - } - }, - "categories": [ - "ternary", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "Provides similar functionality to the *scatter* type but on a ternary phase diagram. The data is provided by at least two arrays out of `a`, `b`, `c` triplets.", - "hrName": "scatter_ternary" - }, - "type": "scatterternary" - }, - "splom": { - "animatable": false, - "attributes": { - "customdata": { - "description": "Assigns extra data each datum. This may be useful when listening to hover, click and selection events. Note that, *scatter* traces also appends customdata items in the markers DOM elements", - "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" - }, - "diagonal": { - "editType": "calc", - "role": "object", - "visible": { - "description": "Determines whether or not subplots on the diagonal are displayed.", - "dflt": true, - "editType": "calc", - "valType": "boolean" - } - }, - "dimensions": { - "items": { - "dimension": { - "axis": { - "editType": "calc+clearAxisTypes", - "matches": { - "description": "Determines whether or not the x & y axes generated by this dimension match. Equivalent to setting the `matches` axis attribute in the layout with the correct axis id.", - "dflt": false, - "editType": "calc", - "valType": "boolean" + "tickformatstops": { + "items": { + "tickformatstop": { + "dtickrange": { + "description": "range [*min*, *max*], where *min*, *max* - dtick values which describe some zoom level, it is possible to omit *min* or *max* value by passing *null*", + "editType": "ticks", + "items": [ + { + "editType": "ticks", + "valType": "any" + }, + { + "editType": "ticks", + "valType": "any" + } + ], + "valType": "info_array" + }, + "editType": "ticks", + "enabled": { + "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`.", + "dflt": true, + "editType": "ticks", + "valType": "boolean" + }, + "name": { + "description": "When used in a template, named items are created in the output figure in addition to any items the figure already has in this array. You can modify these items in the output figure by making your own item with `templateitemname` matching this `name` alongside your modifications (including `visible: false` or `enabled: false` to hide it). Has no effect outside of a template.", + "editType": "none", + "valType": "string" + }, + "role": "object", + "templateitemname": { + "description": "Used to refer to a named item in this array in the template. Named items from the template will be created even without a matching item in the input figure, but you can modify one by making an item with `templateitemname` matching its `name`, alongside your modifications (including `visible: false` or `enabled: false` to hide it). If there is no template or no matching item, this item will be hidden unless you explicitly show it with `visible: true`.", + "editType": "calc", + "valType": "string" + }, + "value": { + "description": "string - dtickformat for described zoom level, the same as *tickformat*", + "dflt": "", + "editType": "ticks", + "valType": "string" + } + } + }, + "role": "object" + }, + "ticklabelindex": { + "arrayOk": true, + "description": "Only for axes with `type` *date* or *linear*. Instead of drawing the major tick label, draw the label for the minor tick that is n positions away from the major tick. E.g. to always draw the label for the minor tick before each major tick, choose `ticklabelindex` -1. This is useful for date axes with `ticklabelmode` *period* if you want to label the period that ends with each major tick instead of the period that begins there.", + "editType": "calc", + "valType": "integer" + }, + "ticklabelindexsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticklabelindex`.", + "editType": "none", + "valType": "string" + }, + "ticklabelmode": { + "description": "Determines where tick labels are drawn with respect to their corresponding ticks and grid lines. Only has an effect for axes of `type` *date* When set to *period*, tick labels are drawn in the middle of the period between ticks.", + "dflt": "instant", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "instant", + "period" + ] + }, + "ticklabeloverflow": { + "description": "Determines how we handle tick labels that would overflow either the graph div or the domain of the axis. The default value for inside tick labels is *hide past domain*. Otherwise on *category* and *multicategory* axes the default is *allow*. In other cases the default is *hide past div*.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "allow", + "hide past div", + "hide past domain" + ] + }, + "ticklabelposition": { + "description": "Determines where tick labels are drawn with respect to the axis. Please note that top or bottom has no effect on x axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Similarly, left or right has no effect on y axes or when `ticklabelmode` is set to *period* or when `tickson` is set to *boundaries*. Has no effect on *multicategory* axes. When used on axes linked by `matches` or `scaleanchor`, no extra padding for inside labels would be added by autorange, so that the scales could match.", + "dflt": "outside", + "editType": "calc", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "outside top", + "inside top", + "outside left", + "inside left", + "outside right", + "inside right", + "outside bottom", + "inside bottom" + ] + }, + "ticklabelshift": { + "description": "Shifts the tick labels by the specified number of pixels in parallel to the axis. Positive values move the labels in the positive direction of the axis.", + "dflt": 0, + "editType": "ticks", + "valType": "integer" + }, + "ticklabelstandoff": { + "description": "Sets the standoff distance (in px) between the axis tick labels and their default position. A positive `ticklabelstandoff` moves the labels farther away from the plot area if `ticklabelposition` is *outside*, and deeper into the plot area if `ticklabelposition` is *inside*. A negative `ticklabelstandoff` works in the opposite direction, moving outside ticks towards the plot area and inside ticks towards the outside. If the negative value is large enough, inside ticks can even end up outside and vice versa.", + "dflt": 0, + "editType": "ticks", + "valType": "integer" + }, + "ticklabelstep": { + "description": "Sets the spacing between tick labels as compared to the spacing between ticks. A value of 1 (default) means each tick gets a label. A value of 2 means shows every 2nd label. A larger value n means only every nth tick is labeled. `tick0` determines which labels are shown. Not implemented for axes with `type` *log* or *multicategory*, or when `tickmode` is *array*.", + "dflt": 1, + "editType": "ticks", + "min": 1, + "valType": "integer" + }, + "ticklen": { + "description": "Sets the tick length (in px).", + "dflt": 5, + "editType": "ticks", + "min": 0, + "valType": "number" + }, + "tickmode": { + "description": "Sets the tick mode for this axis. If *auto*, the number of ticks is set via `nticks`. If *linear*, the placement of the ticks is determined by a starting position `tick0` and a tick step `dtick` (*linear* is the default value if `tick0` and `dtick` are provided). If *array*, the placement of the ticks is set via `tickvals` and the tick text is `ticktext`. (*array* is the default value if `tickvals` is provided). If *sync*, the number of ticks will sync with the overlayed axis set by `overlaying` property.", + "editType": "ticks", + "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "auto", + "linear", + "array", + "sync" + ] + }, + "tickprefix": { + "description": "Sets a tick label prefix.", + "dflt": "", + "editType": "ticks", + "valType": "string" + }, + "ticks": { + "description": "Determines whether ticks are drawn or not. If **, this axis' ticks are not drawn. If *outside* (*inside*), this axis' are drawn outside (inside) the axis lines.", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "outside", + "inside", + "" + ] + }, + "tickson": { + "description": "Determines where ticks and grid lines are drawn with respect to their corresponding tick labels. Only has an effect for axes of `type` *category* or *multicategory*. When set to *boundaries*, ticks and grid lines are drawn half a category to the left/bottom of labels.", + "dflt": "labels", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "labels", + "boundaries" + ] + }, + "ticksuffix": { + "description": "Sets a tick label suffix.", + "dflt": "", + "editType": "ticks", + "valType": "string" + }, + "ticktext": { + "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.", + "editType": "ticks", + "valType": "data_array" + }, + "ticktextsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `ticktext`.", + "editType": "none", + "valType": "string" + }, + "tickvals": { + "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.", + "editType": "ticks", + "valType": "data_array" + }, + "tickvalssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `tickvals`.", + "editType": "none", + "valType": "string" + }, + "tickwidth": { + "description": "Sets the tick width (in px).", + "dflt": 1, + "editType": "ticks", + "min": 0, + "valType": "number" + }, + "title": { + "editType": "ticks", + "font": { + "color": { + "editType": "ticks", + "valType": "color" + }, + "description": "Sets this axis' title font.", + "editType": "ticks", + "family": { + "description": "HTML font family - the typeface that will be applied by the web browser. The web browser can only apply a font if it is available on the system where it runs. Provide multiple font families, separated by commas, to indicate the order in which to apply fonts if they aren't available.", + "editType": "ticks", + "noBlank": true, + "strict": true, + "valType": "string" + }, + "lineposition": { + "description": "Sets the kind of decoration line(s) with text, such as an *under*, *over* or *through* as well as combinations e.g. *under+over*, etc.", + "dflt": "none", + "editType": "ticks", + "extras": [ + "none" + ], + "flags": [ + "under", + "over", + "through" + ], + "valType": "flaglist" + }, + "role": "object", + "shadow": { + "description": "Sets the shape and color of the shadow behind text. *auto* places minimal shadow and applies contrast text font color. See https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow for additional options.", + "dflt": "none", + "editType": "ticks", + "valType": "string" + }, + "size": { + "editType": "ticks", + "min": 1, + "valType": "number" + }, + "style": { + "description": "Sets whether a font should be styled with a normal or italic face from its family.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "italic" + ] + }, + "textcase": { + "description": "Sets capitalization of text. It can be used to make text appear in all-uppercase or all-lowercase, or with each word capitalized.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] + }, + "variant": { + "description": "Sets the variant of the font.", + "dflt": "normal", + "editType": "ticks", + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] + }, + "weight": { + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", + "editType": "ticks", + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" + } + }, + "role": "object", + "standoff": { + "description": "Sets the standoff distance (in px) between the axis labels and the title text The default value is a function of the axis tick labels, the title `font.size` and the axis `linewidth`. Note that the axis title position is always constrained within the margins, so the actual standoff distance is always less than the set or default value. By setting `standoff` and turning on `automargin`, plotly.js will push the margins to fit the axis title at given standoff distance.", + "editType": "ticks", + "min": 0, + "valType": "number" + }, + "text": { + "description": "Sets the title of this axis.", + "editType": "ticks", + "valType": "string" + } }, - "role": "object", ->>>>>>> 776a4535b (Name plot type quiver not scatterquiver) "type": { "_noTemplating": true, "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question.",