From 1fd2576e78bd4caa18a481efb279f285d0d45a78 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 21 Oct 2025 13:56:52 -0700 Subject: [PATCH 01/18] 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 | 858 ++++++++++++++++++++++ 13 files changed, 1484 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 9d41ec19435..e81b7fa0a5c 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -79159,6 +79159,864 @@ }, "type": "scatterpolargl" }, + "scatterquiver": { + "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": "scatterquiver", + "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 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." + }, + "type": "scatterquiver" + }, "scattersmith": { "animatable": false, "attributes": { From 063d93a7c8f7d5ebbae3e72398194284ac9c2fe3 Mon Sep 17 00:00:00 2001 From: John Degner Date: Wed, 22 Oct 2025 08:43:35 -0700 Subject: [PATCH 02/18] 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 bdf7c18d13b075145e225f47bb2dcb210de3443c Mon Sep 17 00:00:00 2001 From: John Degner Date: Sun, 2 Nov 2025 09:59:30 -0800 Subject: [PATCH 03/18] Name plot type quiver not scatterquiver --- lib/index-strict.js | 2 +- lib/index.js | 2 +- lib/quiver.js | 5 +++++ lib/scatterquiver.js | 3 --- src/traces/{scatterquiver => quiver}/attributes.js | 4 +++- src/traces/{scatterquiver => quiver}/calc.js | 8 ++++---- src/traces/{scatterquiver => quiver}/defaults.js | 6 ++++-- src/traces/{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 ++++-- src/traces/{scatterquiver => quiver}/select_points.js | 2 ++ src/traces/{scatterquiver => quiver}/style.js | 2 ++ test/plot-schema.json | 8 ++++---- 14 files changed, 39 insertions(+), 21 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 e81b7fa0a5c..5613dc7ba17 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -79159,7 +79159,7 @@ }, "type": "scatterpolargl" }, - "scatterquiver": { + "quiver": { "animatable": true, "attributes": { "angle": { @@ -79897,7 +79897,7 @@ "editType": "none", "valType": "string" }, - "type": "scatterquiver", + "type": "quiver", "u": { "anim": true, "description": "Sets the x components of the arrow vectors.", @@ -80013,9 +80013,9 @@ "zoomScale" ], "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." + "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": "scatterquiver" + "type": "quiver" }, "scattersmith": { "animatable": false, From abb27b6a29c67e73f2d8d199efc8a8f0678bd166 Mon Sep 17 00:00:00 2001 From: John Degner Date: Sun, 2 Nov 2025 17:00:36 -0800 Subject: [PATCH 04/18] 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 5613dc7ba17..f8eef5fd508 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -79654,14 +79654,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 9a5ce6d47c5db65445c0e99b006fc83d61da8231 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 12:07:16 -0800 Subject: [PATCH 05/18] 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 | 26286 +++++++++++++++--------------- 4 files changed, 13185 insertions(+), 13148 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 f8eef5fd508..9de100c44a2 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -57541,21 +57541,50 @@ }, "type": "pie" }, - "sankey": { - "animatable": false, + "quiver": { + "animatable": true, "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", + "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": [ - "snap", - "perpendicular", - "freeform", - "fixed" + "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", @@ -57566,89 +57595,44 @@ "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" - }, + "hoverdistance": { + "description": "Maximum distance (in pixels) to look for nearby arrows on hover.", + "dflt": 20, "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" - } + "min": -1, + "valType": "number" }, "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.", + "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", + "editType": "none", "extras": [ "all", "none", "skip" ], - "flags": [], + "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": "calc", + "editType": "none", "valType": "enumerated", "values": [ "left", @@ -57664,7 +57648,7 @@ "bgcolor": { "arrayOk": true, "description": "Sets the background color of the hover labels for this trace", - "editType": "calc", + "editType": "none", "valType": "color" }, "bgcolorsrc": { @@ -57675,7 +57659,7 @@ "bordercolor": { "arrayOk": true, "description": "Sets the border color of the hover labels for this trace.", - "editType": "calc", + "editType": "none", "valType": "color" }, "bordercolorsrc": { @@ -57683,11 +57667,11 @@ "editType": "none", "valType": "string" }, - "editType": "calc", + "editType": "none", "font": { "color": { "arrayOk": true, - "editType": "calc", + "editType": "none", "valType": "color" }, "colorsrc": { @@ -57696,11 +57680,11 @@ "valType": "string" }, "description": "Sets the font used in hover labels.", - "editType": "calc", + "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": "calc", + "editType": "none", "noBlank": true, "strict": true, "valType": "string" @@ -57714,7 +57698,7 @@ "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", + "editType": "none", "extras": [ "none" ], @@ -57735,7 +57719,7 @@ "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", + "editType": "none", "valType": "string" }, "shadowsrc": { @@ -57745,7 +57729,7 @@ }, "size": { "arrayOk": true, - "editType": "calc", + "editType": "none", "min": 1, "valType": "number" }, @@ -57758,7 +57742,7 @@ "arrayOk": true, "description": "Sets whether a font should be styled with a normal or italic face from its family.", "dflt": "normal", - "editType": "calc", + "editType": "none", "valType": "enumerated", "values": [ "normal", @@ -57774,7 +57758,7 @@ "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", + "editType": "none", "valType": "enumerated", "values": [ "normal", @@ -57792,7 +57776,7 @@ "arrayOk": true, "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "none", "valType": "enumerated", "values": [ "normal", @@ -57812,7 +57796,7 @@ "arrayOk": true, "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "none", "extras": [ "normal", "bold" @@ -57831,7 +57815,7 @@ "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", + "editType": "none", "min": -1, "valType": "integer" }, @@ -57844,11 +57828,24 @@ "showarrow": { "description": "Sets whether or not to show the hover label arrow/triangle pointing to the data point.", "dflt": true, - "editType": "calc", + "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" @@ -57864,6 +57861,12 @@ "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": { @@ -57975,1423 +57978,1620 @@ "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" - }, + "line": { "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", + "description": "Sets the color of the arrow lines.", + "dflt": "#000", + "editType": "style", "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" - ] - ], - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "editType": "calc", - "label": { - "description": "The label of the links to color based on their concentration within a flow.", - "dflt": "", - "editType": "calc", - "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": "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" - } - } - }, - "role": "object" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "customdata": { - "description": "Assigns extra data to each link.", - "editType": "calc", - "valType": "data_array" + "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" + ] }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "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": "The links of the Sankey plot.", + "description": "Sets the text font.", "editType": "calc", - "hovercolor": { + "family": { "arrayOk": true, - "description": "Sets the `link` hover color. It can be a single value, or an array for specifying hover colors for each `link`. If `link.hovercolor` is omitted, then by default, links will become slightly more opaque when hovered over.", + "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", - "valType": "color" + "noBlank": true, + "strict": true, + "valType": "string" }, - "hovercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovercolor`.", + "familysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `family`.", "editType": "none", "valType": "string" }, - "hoverinfo": { - "description": "Determines which trace information appear when hovering links. 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", + "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": [ - "all", - "none", - "skip" + "normal", + "italic" ] }, - "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" - } + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", + "editType": "none", + "valType": "string" }, - "hovertemplate": { + "textcase": { "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 `value` and `label`. 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": "", + "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" }, - "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": "-", + "variant": { + "arrayOk": true, + "description": "Sets the variant of the font.", + "dflt": "normal", "editType": "calc", - "valType": "any" + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", "editType": "none", "valType": "string" }, - "label": { - "description": "The shown name of the link.", - "dflt": [], + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", "editType": "calc", - "valType": "data_array" + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, + "valType": "integer" }, - "labelsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `label`.", + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", "editType": "none", "valType": "string" - }, - "line": { - "color": { - "arrayOk": true, - "description": "Sets the color of the `line` around each `link`.", - "dflt": "#444", - "editType": "calc", + } + }, + "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" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "editType": "calc", + "editType": "style", "role": "object", "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the `line` around each `link`.", - "dflt": 0, - "editType": "calc", + "description": "Sets the line width of unselected points.", + "editType": "style", "min": 0, "valType": "number" - }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" } }, "role": "object", - "source": { - "description": "An integer number `[0..nodes.length - 1]` that represents the source node.", - "dflt": [], - "editType": "calc", - "valType": "data_array" - }, - "sourcesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `source`.", - "editType": "none", - "valType": "string" - }, - "target": { - "description": "An integer number `[0..nodes.length - 1]` that represents the target node.", - "dflt": [], - "editType": "calc", - "valType": "data_array" - }, - "targetsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `target`.", - "editType": "none", - "valType": "string" - }, - "value": { - "description": "A numeric value representing the flow volume value.", - "dflt": [], - "editType": "calc", - "valType": "data_array" - }, - "valuesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `value`.", - "editType": "none", - "valType": "string" + "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" } }, - "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" + "usrc": { + "description": "Sets the source reference on Chart Studio Cloud for `u`.", + "editType": "none", + "valType": "string" }, - "metasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `meta`.", + "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" }, - "name": { - "description": "Sets the trace name. The trace name appears as the legend item and on hover.", - "editType": "style", + "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" }, - "node": { - "align": { - "description": "Sets the alignment method used to position the nodes along the horizontal axis.", - "dflt": "justify", + "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", - "valType": "enumerated", - "values": [ - "justify", - "left", - "right", - "center" - ] + "min": 0, + "valType": "integer" }, - "color": { - "arrayOk": true, - "description": "Sets the `node` color. It can be a single value, or an array for specifying color for each `node`. If `node.color` is omitted, then the default `Plotly` color palette will be cycled through to have a variety of colors. These defaults are not fully opaque, to allow some visibility of what is beneath the node.", + "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", - "valType": "color" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" + "min": 0, + "valType": "integer" }, - "customdata": { - "description": "Assigns extra data to each node.", + "x": { + "description": "Sets the horizontal domain of this sankey trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], "editType": "calc", - "valType": "data_array" - }, - "customdatasrc": { - "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", - "editType": "none", - "valType": "string" + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], + "valType": "info_array" }, - "description": "The nodes of the Sankey plot.", - "editType": "calc", - "groups": { - "description": "Groups of nodes. Each group is defined by an array with the indices of the nodes it contains. Multiple groups can be specified.", - "dflt": [], - "dimensions": 2, + "y": { + "description": "Sets the vertical domain of this sankey trace (in plot fraction).", + "dflt": [ + 0, + 1 + ], "editType": "calc", - "freeLength": true, - "impliedEdits": { - "x": [], - "y": [] - }, - "items": { - "editType": "calc", - "valType": "number" - }, + "items": [ + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + { + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + } + ], "valType": "info_array" - }, - "hoverinfo": { - "description": "Determines which trace information appear when hovering nodes. 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", + } + }, + "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": [ - "all", - "none", - "skip" + "left", + "right", + "auto" ] }, - "hoverlabel": { - "align": { + "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, - "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": "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": [ - "left", - "right", - "auto" + "normal", + "italic" ] }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "stylesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `style`.", "editType": "none", "valType": "string" }, - "bgcolor": { + "textcase": { "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", + "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": "color" + "valType": "enumerated", + "values": [ + "normal", + "word caps", + "upper", + "lower" + ] }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "textcasesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `textcase`.", "editType": "none", "valType": "string" }, - "bordercolor": { + "variant": { "arrayOk": true, - "description": "Sets the border color of the hover labels for this trace.", + "description": "Sets the variant of the font.", + "dflt": "normal", "editType": "calc", - "valType": "color" + "valType": "enumerated", + "values": [ + "normal", + "small-caps", + "all-small-caps", + "all-petite-caps", + "petite-caps", + "unicase" + ] }, - "bordercolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bordercolor`.", + "variantsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `variant`.", "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.", + "weight": { + "arrayOk": true, + "description": "Sets the weight (or boldness) of the font.", + "dflt": "normal", "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, + "extras": [ + "normal", + "bold" + ], + "max": 1000, + "min": 1, "valType": "integer" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", "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" } }, - "hovertemplate": { + "namelength": { "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 `value` and `label`. 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": "-", + "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", - "valType": "any" + "min": -1, + "valType": "integer" }, - "hovertemplatesrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", + "namelengthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", "editType": "none", "valType": "string" }, - "label": { - "description": "The shown name of the node.", - "dflt": [], + "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": "data_array" - }, - "labelsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `label`.", - "editType": "none", - "valType": "string" - }, - "line": { + "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": { - "arrayOk": true, - "description": "Sets the color of the `line` around each `node`.", - "dflt": "#444", - "editType": "calc", + "editType": "style", "valType": "color" }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", + "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" }, - "editType": "calc", + "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", - "width": { - "arrayOk": true, - "description": "Sets the width (in px) of the `line` around each `node`.", - "dflt": 0.5, - "editType": "calc", - "min": 0, + "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" }, - "widthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `width`.", - "editType": "none", - "valType": "string" - } - }, - "pad": { - "arrayOk": false, - "description": "Sets the padding (in px) between the `nodes`.", - "dflt": 20, - "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" + } }, "role": "object", - "thickness": { - "arrayOk": false, - "description": "Sets the thickness (in px) of the `nodes`.", - "dflt": 20, - "editType": "calc", - "min": 1, - "valType": "number" - }, - "x": { - "description": "The normalized horizontal position of the node.", - "dflt": [], - "editType": "calc", - "valType": "data_array" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "description": "The normalized vertical position of the node.", - "dflt": [], - "editType": "calc", - "valType": "data_array" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", + "text": { + "description": "Sets the title of the legend group.", + "dflt": "", + "editType": "style", "valType": "string" } }, - "orientation": { - "description": "Sets the orientation of the Sankey diagram.", - "dflt": "h", - "editType": "calc", - "valType": "enumerated", - "values": [ - "v", - "h" - ] + "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" }, - "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" + "legendwidth": { + "description": "Sets the width (in px or fraction) of the legend for this trace.", + "editType": "style", + "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, + "link": { + "arrowlen": { + "description": "Sets the length (in px) of the links arrow, if 0 no arrow will be drawn.", + "dflt": 0, "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" - } - }, - "textfont": { "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" }, - "description": "Sets the font for node labels", - "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, + "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" + ] + ], + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "editType": "calc", + "label": { + "description": "The label of the links to color based on their concentration within a flow.", + "dflt": "", + "editType": "calc", + "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": "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" + } + } + }, + "role": "object" + }, + "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", + "customdata": { + "description": "Assigns extra data to each link.", "editType": "calc", - "extras": [ - "none" - ], - "flags": [ - "under", - "over", - "through" - ], - "valType": "flaglist" + "valType": "data_array" }, - "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": "calc", + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", + "editType": "none", "valType": "string" }, - "size": { + "description": "The links of the Sankey plot.", + "editType": "calc", + "hovercolor": { + "arrayOk": true, + "description": "Sets the `link` hover color. It can be a single value, or an array for specifying hover colors for each `link`. If `link.hovercolor` is omitted, then by default, links will become slightly more opaque when hovered over.", "editType": "calc", - "min": 1, - "valType": "number" + "valType": "color" }, - "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" - ] + "hovercolorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovercolor`.", + "editType": "none", + "valType": "string" }, - "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", + "hoverinfo": { + "description": "Determines which trace information appear when hovering links. 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", "valType": "enumerated", "values": [ - "normal", - "word caps", - "upper", - "lower" + "all", + "none", + "skip" ] }, - "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" - ] + "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" + } }, - "weight": { - "description": "Sets the weight (or boldness) of the font.", - "dflt": "normal", + "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 `value` and `label`. 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", - "extras": [ - "normal", - "bold" - ], - "max": 1000, - "min": 1, - "valType": "integer" - } - }, - "type": "sankey", - "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" - }, - "valueformat": { - "description": "Sets the value 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.", - "dflt": ".3s", - "editType": "calc", - "valType": "string" - }, - "valuesuffix": { - "description": "Adds a unit to follow the value in the hover tooltip. Add a space if a separation is necessary from the value.", - "dflt": "", - "editType": "calc", - "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": [ - "noOpacity" - ], - "meta": { - "description": "Sankey plots for network flow data analysis. The nodes are specified in `nodes` and the links between sources and targets in `links`. The colors are set in `nodes[i].color` and `links[i].color`, otherwise defaults are used." - }, - "type": "sankey" - }, - "scatter": { - "animatable": true, - "attributes": { - "alignmentgroup": { - "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "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" - }, - "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" - }, - "dx": { - "anim": true, - "description": "Sets the x coordinate step. See `x0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "dy": { - "anim": true, - "description": "Sets the y coordinate step. See `y0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "error_x": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" + "valType": "string" }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "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": "data_array" + "valType": "any" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "hovertemplatesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `hovertemplate`.", "editType": "none", "valType": "string" }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "label": { + "description": "The shown name of the link.", + "dflt": [], + "editType": "calc", + "valType": "data_array" + }, + "labelsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `label`.", "editType": "none", "valType": "string" }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "style", - "valType": "color" - }, - "copy_ystyle": { - "editType": "plot", - "valType": "boolean" + "line": { + "color": { + "arrayOk": true, + "description": "Sets the color of the `line` around each `link`.", + "dflt": "#444", + "editType": "calc", + "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` around each `link`.", + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "widthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `width`.", + "editType": "none", + "valType": "string" + } }, - "editType": "calc", "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "source": { + "description": "An integer number `[0..nodes.length - 1]` that represents the source node.", + "dflt": [], "editType": "calc", - "valType": "boolean" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number" - }, - "traceref": { - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "integer" - }, - "tracerefminus": { - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "integer" + "valType": "data_array" }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "percent", - "constant", - "sqrt", - "data" - ] + "sourcesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `source`.", + "editType": "none", + "valType": "string" }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, + "target": { + "description": "An integer number `[0..nodes.length - 1]` that represents the target node.", + "dflt": [], "editType": "calc", - "min": 0, - "valType": "number" + "valType": "data_array" }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" + "targetsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `target`.", + "editType": "none", + "valType": "string" }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", + "value": { + "description": "A numeric value representing the flow volume value.", + "dflt": [], "editType": "calc", - "valType": "boolean" + "valType": "data_array" }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "plot", - "min": 0, - "valType": "number" + "valuesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `value`.", + "editType": "none", + "valType": "string" } }, - "error_y": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "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" + }, + "node": { + "align": { + "description": "Sets the alignment method used to position the nodes along the horizontal axis.", + "dflt": "justify", "editType": "calc", - "valType": "data_array" + "valType": "enumerated", + "values": [ + "justify", + "left", + "right", + "center" + ] }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "color": { + "arrayOk": true, + "description": "Sets the `node` color. It can be a single value, or an array for specifying color for each `node`. If `node.color` is omitted, then the default `Plotly` color palette will be cycled through to have a variety of colors. These defaults are not fully opaque, to allow some visibility of what is beneath the node.", "editType": "calc", - "valType": "data_array" + "valType": "color" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", "editType": "none", "valType": "string" }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "customdata": { + "description": "Assigns extra data to each node.", + "editType": "calc", + "valType": "data_array" + }, + "customdatasrc": { + "description": "Sets the source reference on Chart Studio Cloud for `customdata`.", "editType": "none", "valType": "string" }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "style", - "valType": "color" - }, + "description": "The nodes of the Sankey plot.", "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "groups": { + "description": "Groups of nodes. Each group is defined by an array with the indices of the nodes it contains. Multiple groups can be specified.", + "dflt": [], + "dimensions": 2, "editType": "calc", - "valType": "boolean" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "style", - "min": 0, - "valType": "number" - }, - "traceref": { - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "integer" - }, - "tracerefminus": { - "dflt": 0, - "editType": "style", - "min": 0, - "valType": "integer" + "freeLength": true, + "impliedEdits": { + "x": [], + "y": [] + }, + "items": { + "editType": "calc", + "valType": "number" + }, + "valType": "info_array" }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "hoverinfo": { + "description": "Determines which trace information appear when hovering nodes. 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", "valType": "enumerated", "values": [ - "percent", - "constant", - "sqrt", - "data" + "all", + "none", + "skip" ] }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "plot", - "min": 0, - "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.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "none", - "tozeroy", - "tozerox", - "tonexty", - "tonextx", - "toself", - "tonext" - ] - }, - "fillcolor": { - "anim": true, - "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available. If fillgradient is specified, fillcolor is ignored except for setting the background color of the hover label, if any.", - "editType": "style", - "valType": "color" - }, - "fillgradient": { - "colorscale": { - "description": "Sets the fill gradient colors as a color scale. The color scale is interpreted as a gradient applied in the direction specified by *orientation*, from the lowest to the highest value of the scatter plot along that axis, or from the center to the most distant point from it, if orientation is *radial*.", - "editType": "style", - "valType": "colorscale" - }, - "description": "Sets a fill gradient. If not specified, the fillcolor is used instead.", - "editType": "calc", - "role": "object", - "start": { - "description": "Sets the gradient start value. It is given as the absolute position on the axis determined by the orientiation. E.g., if orientation is *horizontal*, the gradient will be horizontal and start from the x-position given by start. If omitted, the gradient starts at the lowest value of the trace along the respective axis. Ignored if orientation is *radial*.", - "editType": "calc", - "valType": "number" - }, - "stop": { - "description": "Sets the gradient end value. It is given as the absolute position on the axis determined by the orientiation. E.g., if orientation is *horizontal*, the gradient will be horizontal and end at the x-position given by end. If omitted, the gradient ends at the highest value of the trace along the respective axis. Ignored if orientation is *radial*.", - "editType": "calc", - "valType": "number" - }, - "type": { - "description": "Sets the type/orientation of the color gradient for the fill. Defaults to *none*.", - "dflt": "none", + "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", - "valType": "enumerated", - "values": [ - "radial", - "horizontal", - "vertical", - "none" - ] - } - }, - "fillpattern": { - "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" + "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" + } }, - "soliditysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `solidity`.", - "editType": "none", - "valType": "string" - } - }, - "groupnorm": { - "description": "Only relevant when `stackgroup` is used, and only the first `groupnorm` found in the `stackgroup` will be used - including if `visible` is *legendonly* but not if it is `false`. Sets the normalization for the sum of this `stackgroup`. With *fraction*, the value of each trace at each location is divided by the sum of all trace values at that location. *percent* is the same but multiplied by 100 to show percentages. If there are multiple subplots, or multiple `stackgroup`s on one subplot, each will be normalized within its own set.", - "dflt": "", - "editType": "calc", - "valType": "enumerated", - "values": [ - "", - "fraction", - "percent" - ] - }, - "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", - "z", - "text", - "name" - ], - "valType": "flaglist" - }, - "hoverinfosrc": { - "description": "Sets the source reference on Chart Studio Cloud for `hoverinfo`.", - "editType": "none", - "valType": "string" - }, - "hoverlabel": { - "align": { + "hovertemplate": { "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" - ] + "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 `value` and `label`. 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" }, - "alignsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `align`.", + "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" }, - "bgcolor": { - "arrayOk": true, - "description": "Sets the background color of the hover labels for this trace", - "editType": "none", - "valType": "color" + "label": { + "description": "The shown name of the node.", + "dflt": [], + "editType": "calc", + "valType": "data_array" }, - "bgcolorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `bgcolor`.", + "labelsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `label`.", "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": { + "line": { "color": { "arrayOk": true, - "editType": "none", + "description": "Sets the color of the `line` around each `node`.", + "dflt": "#444", + "editType": "calc", "valType": "color" }, "colorsrc": { @@ -59399,9766 +59599,415 @@ "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" - }, + "editType": "calc", "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": { + "width": { "arrayOk": true, - "editType": "none", - "min": 1, + "description": "Sets the width (in px) of the `line` around each `node`.", + "dflt": 0.5, + "editType": "calc", + "min": 0, "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`.", + "widthsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `width`.", "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" + "pad": { + "arrayOk": false, + "description": "Sets the padding (in px) between the `nodes`.", + "dflt": 20, + "editType": "calc", + "min": 0, + "valType": "number" }, - "namelengthsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `namelength`.", + "role": "object", + "thickness": { + "arrayOk": false, + "description": "Sets the thickness (in px) of the `nodes`.", + "dflt": 20, + "editType": "calc", + "min": 1, + "valType": "number" + }, + "x": { + "description": "The normalized horizontal position of the node.", + "dflt": [], + "editType": "calc", + "valType": "data_array" + }, + "xsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `x`.", "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, + "y": { + "description": "The normalized vertical position of the node.", + "dflt": [], + "editType": "calc", + "valType": "data_array" + }, + "ysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `y`.", "editType": "none", - "valType": "boolean" + "valType": "string" } }, - "hoveron": { - "description": "Do the hover effects highlight individual points (markers or line points) or do they highlight filled regions? If the fill is *toself* or *tonext* and there are no markers or text, then the default is *fills*, otherwise it is *points*.", - "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" + "orientation": { + "description": "Sets the orientation of the Sankey diagram.", + "dflt": "h", + "editType": "calc", + "valType": "enumerated", + "values": [ + "v", + "h" + ] }, - "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", + "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" }, - "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": { - "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.", + "stream": { "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" - } + "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", - "text": { - "description": "Sets the title of the legend group.", - "dflt": "", - "editType": "style", + "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" } }, - "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" - }, + "textfont": { "color": { - "anim": true, - "description": "Sets the line color.", - "editType": "style", + "editType": "calc", "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": "plot", - "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", - "hv", - "vh", - "hvh", - "vhv" - ] + "description": "Sets the font for node labels", + "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" }, - "simplify": { - "description": "Simplifies lines by removing nearly-collinear points. When transitioning lines, it may be desirable to disable this so that the number of points along the resulting SVG path is unaffected.", - "dflt": true, - "editType": "plot", - "valType": "boolean" + "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" }, - "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" + "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": "calc", + "valType": "string" }, - "width": { - "anim": true, - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "style", - "min": 0, + "size": { + "editType": "calc", + "min": 1, "valType": "number" - } - }, - "marker": { - "angle": { - "anim": false, - "arrayOk": true, - "description": "Sets the marker angle in respect to `angleref`.", - "dflt": 0, - "editType": "plot", - "valType": "angle" }, - "angleref": { - "anim": false, - "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", + "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": [ - "previous", - "up" + "normal", + "italic" ] }, - "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, + "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", - "impliedEdits": {}, + "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" + } + }, + "type": "sankey", + "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" + }, + "valueformat": { + "description": "Sets the value 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.", + "dflt": ".3s", + "editType": "calc", + "valType": "string" + }, + "valuesuffix": { + "description": "Adds a unit to follow the value in the hover tooltip. Add a space if a separation is necessary from the value.", + "dflt": "", + "editType": "calc", + "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": [ + "noOpacity" + ], + "meta": { + "description": "Sankey plots for network flow data analysis. The nodes are specified in `nodes` and the links between sources and targets in `links`. The colors are set in `nodes[i].color` and `links[i].color`, otherwise defaults are used." + }, + "type": "sankey" + }, + "scatter": { + "animatable": true, + "attributes": { + "alignmentgroup": { + "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "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" + }, + "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" + }, + "dx": { + "anim": true, + "description": "Sets the x coordinate step. See `x0` for more info.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "dy": { + "anim": true, + "description": "Sets the y coordinate step. See `y0` for more info.", + "dflt": 1, + "editType": "calc", + "valType": "number" + }, + "error_x": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminussrc": { + "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "editType": "none", + "valType": "string" + }, + "arraysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "style", + "valType": "color" + }, + "copy_ystyle": { + "editType": "plot", "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", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", "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 - }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "style", + "min": 0, "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, + "traceref": { + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "integer" + }, + "tracerefminus": { + "dflt": 0, + "editType": "style", + "min": 0, + "valType": "integer" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", "editType": "calc", - "impliedEdits": {}, + "valType": "enumerated", + "values": [ + "percent", + "constant", + "sqrt", + "data" + ] + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, "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, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", "editType": "plot", - "impliedEdits": { - "cauto": false - }, + "min": 0, "valType": "number" + } + }, + "error_y": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminussrc": { + "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "editType": "none", + "valType": "string" + }, + "arraysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "editType": "none", + "valType": "string" }, "color": { - "anim": true, - "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.", + "description": "Sets the stroke color of the error bars.", "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", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", "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": { - "anim": true, - "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": { - "anim": true, - "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": { - "anim": true, - "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": { - "anim": true, - "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": { - "anim": true, - "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" - }, - "offsetgroup": { - "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "opacity": { - "description": "Sets the opacity of the trace.", - "dflt": 1, - "editType": "style", - "max": 1, - "min": 0, - "valType": "number" - }, - "orientation": { - "description": "Only relevant in the following cases: 1. when `scattermode` is set to *group*. 2. when `stackgroup` is used, and only the first `orientation` found in the `stackgroup` will be used - including if `visible` is *legendonly* but not if it is `false`. Sets the stacking direction. With *v* (*h*), the y (x) values of subsequent traces are added. Also affects the default value of `fill`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "v", - "h" - ] - }, - "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" - }, - "stackgaps": { - "description": "Only relevant when `stackgroup` is used, and only the first `stackgaps` found in the `stackgroup` will be used - including if `visible` is *legendonly* but not if it is `false`. Determines how we handle locations at which other traces in this group have data but this one does not. With *infer zero* we insert a zero at these locations. With *interpolate* we linearly interpolate between existing values, and extrapolate a constant beyond the existing values.", - "dflt": "infer zero", - "editType": "calc", - "valType": "enumerated", - "values": [ - "infer zero", - "interpolate" - ] - }, - "stackgroup": { - "description": "Set several scatter traces (on the same subplot) to the same stackgroup in order to add their y values (or their x values if `orientation` is *h*). If blank or omitted this trace will not be stacked. Stacking also turns `fill` on by default, using *tonexty* (*tonextx*) if `orientation` is *h* (*v*) and sets the default `mode` to *lines* irrespective of point count. You can only stack on a numeric (linear or log) axis. 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": "", - "editType": "calc", - "valType": "string" - }, - "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": { - "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. ", - "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": "scatter", - "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", - "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" - ] - }, - "x": { - "anim": true, - "description": "Sets the x coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "x0": { - "anim": true, - "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "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" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ] - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` 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*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "xperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any" - }, - "xperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", - "editType": "calc", - "valType": "any" - }, - "xperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", - "dflt": "middle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ] - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "anim": true, - "description": "Sets the y coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "y0": { - "anim": true, - "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "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" - }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ] - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` 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*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "none", - "valType": "string" - }, - "yperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any" - }, - "yperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", - "editType": "calc", - "valType": "any" - }, - "yperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", - "dflt": "middle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ] - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "zorder": { - "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", - "dflt": 0, - "editType": "plot", - "valType": "integer" - } - }, - "categories": [ - "cartesian", - "svg", - "symbols", - "errorBarsOK", - "showLegend", - "scatter-like", - "zoomScale" - ], - "layoutAttributes": { - "scattergap": { - "description": "Sets the gap (in plot fraction) between scatter points of adjacent location coordinates. Defaults to `bargap`.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "scattermode": { - "description": "Determines how scatter points at the same location coordinate are displayed on the graph. With *group*, the scatter points are plotted next to one another centered around the shared location. With *overlay*, the scatter points are plotted over one another, you might need to reduce *opacity* to see multiple scatter points.", - "dflt": "overlay", - "editType": "calc", - "valType": "enumerated", - "values": [ - "group", - "overlay" - ] - } - }, - "meta": { - "description": "The scatter trace type encompasses line charts, scatter charts, text charts, and bubble charts. The data visualized as scatter point or lines is set in `x` and `y`. 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." - }, - "type": "scatter" - }, - "scatter3d": { - "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" - }, - "error_x": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "calc", - "valType": "color" - }, - "copy_zstyle": { - "editType": "calc", - "valType": "boolean" - }, - "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "traceref": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "tracerefminus": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "percent", - "constant", - "sqrt", - "data" - ] - }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "error_y": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "calc", - "valType": "color" - }, - "copy_zstyle": { - "editType": "calc", - "valType": "boolean" - }, - "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "traceref": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "tracerefminus": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "percent", - "constant", - "sqrt", - "data" - ] - }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "error_z": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "traceref": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "tracerefminus": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", - "valType": "enumerated", - "values": [ - "percent", - "constant", - "sqrt", - "data" - ] - }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean" - }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "calc", - "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": "calc", - "extras": [ - "all", - "none", - "skip" - ], - "flags": [ - "x", - "y", - "z", - "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 text elements associated with each (x,y,z) triplet. 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,z) 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" - }, - "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": { - "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": 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 `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": "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 `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": null, - "editType": "calc", - "impliedEdits": { - "autocolorscale": false - }, - "valType": "colorscale" - }, - "colorsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `color`.", - "editType": "none", - "valType": "string" - }, - "dash": { - "description": "Sets the dash style of the lines.", - "dflt": "solid", - "editType": "calc", - "valType": "enumerated", - "values": [ - "dash", - "dashdot", - "dot", - "longdash", - "longdashdot", - "solid" - ] - }, - "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": "calc", - "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" - }, - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "marker": { - "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": false, - "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "opacity": { - "arrayOk": false, - "description": "Sets the marker opacity. Note that the marker opacity for scatter3d traces must be a scalar value for performance reasons. To set a blending opacity value (i.e. which is not transparent), set *marker.color* to an rgba color and use its alpha channel.", - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "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": 8, - "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.", - "dflt": "circle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "circle", - "circle-open", - "cross", - "diamond", - "diamond-open", - "square", - "square-open", - "x" - ] - }, - "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": "lines+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": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "projection": { - "editType": "calc", - "role": "object", - "x": { - "editType": "calc", - "opacity": { - "description": "Sets the projection color.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "scale": { - "description": "Sets the scale factor determining the size of the projection marker points.", - "dflt": 0.6666666666666666, - "editType": "calc", - "max": 10, - "min": 0, - "valType": "number" - }, - "show": { - "description": "Sets whether or not projections are shown along the x axis.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - } - }, - "y": { - "editType": "calc", - "opacity": { - "description": "Sets the projection color.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "scale": { - "description": "Sets the scale factor determining the size of the projection marker points.", - "dflt": 0.6666666666666666, - "editType": "calc", - "max": 10, - "min": 0, - "valType": "number" - }, - "show": { - "description": "Sets whether or not projections are shown along the y axis.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - } - }, - "z": { - "editType": "calc", - "opacity": { - "description": "Sets the projection color.", - "dflt": 1, - "editType": "calc", - "max": 1, - "min": 0, - "valType": "number" - }, - "role": "object", - "scale": { - "description": "Sets the scale factor determining the size of the projection marker points.", - "dflt": 0.6666666666666666, - "editType": "calc", - "max": 10, - "min": 0, - "valType": "number" - }, - "show": { - "description": "Sets whether or not projections are shown along the z axis.", - "dflt": false, - "editType": "calc", - "valType": "boolean" - } - } - }, - "scene": { - "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", - "dflt": "scene", - "editType": "calc+clearAxisTypes", - "valType": "subplotid" - }, - "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" - } - }, - "surfaceaxis": { - "description": "If *-1*, the scatter points are not fill with a surface If *0*, *1*, *2*, the scatter points are filled with a Delaunay surface about the x, y, z respectively.", - "dflt": -1, - "editType": "calc", - "valType": "enumerated", - "values": [ - -1, - 0, - 1, - 2 - ] - }, - "surfacecolor": { - "description": "Sets the surface fill color.", - "editType": "calc", - "valType": "color" - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (x,y,z) triplet. 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,z) 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", - "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": "top 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. ", - "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": "scatter3d", - "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" - }, - "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" - ] - }, - "x": { - "description": "Sets the x coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "xcalendar": { - "description": "Sets the calendar system to use with `x` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ] - }, - "xhoverformat": { - "description": "Sets the hover text formatting rulefor `x` 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*By default the values are formatted using `xaxis.hoverformat`.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "xsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `x`.", - "editType": "none", - "valType": "string" - }, - "y": { - "description": "Sets the y coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "ycalendar": { - "description": "Sets the calendar system to use with `y` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ] - }, - "yhoverformat": { - "description": "Sets the hover text formatting rulefor `y` 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*By default the values are formatted using `yaxis.hoverformat`.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", - "editType": "none", - "valType": "string" - }, - "z": { - "description": "Sets the z coordinates.", - "editType": "calc+clearAxisTypes", - "valType": "data_array" - }, - "zcalendar": { - "description": "Sets the calendar system to use with `z` date data.", - "dflt": "gregorian", - "editType": "calc", - "valType": "enumerated", - "values": [ - "chinese", - "coptic", - "discworld", - "ethiopian", - "gregorian", - "hebrew", - "islamic", - "jalali", - "julian", - "mayan", - "nanakshahi", - "nepali", - "persian", - "taiwan", - "thai", - "ummalqura" - ] - }, - "zhoverformat": { - "description": "Sets the hover text formatting rulefor `z` 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*By default the values are formatted using `zaxis.hoverformat`.", - "dflt": "", - "editType": "calc", - "valType": "string" - }, - "zsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `z`.", - "editType": "none", - "valType": "string" - } - }, - "categories": [ - "gl3d", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The data visualized as scatter point or lines in 3D dimension is set in `x`, `y`, `z`. 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` Projections are achieved via `projection`. Surface fills are achieved via `surfaceaxis`.", - "hrName": "scatter_3d" - }, - "type": "scatter3d" - }, - "scattercarpet": { - "animatable": false, - "attributes": { - "a": { - "description": "Sets the a-axis coordinates.", - "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 b-axis coordinates.", - "editType": "calc", - "valType": "data_array" - }, - "bsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `b`.", - "editType": "none", - "valType": "string" - }, - "carpet": { - "description": "An identifier for this carpet, so that `scattercarpet` and `contourcarpet` traces can specify a carpet plot on which they lie", - "editType": "calc", - "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*. 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", - "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) 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). 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" - } - }, - "text": { - "arrayOk": true, - "description": "Sets text elements associated with each (a,b) 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). 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` 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": "scattercarpet", - "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" - ] - }, - "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" - }, - "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" - }, - "zorder": { - "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", - "dflt": 0, - "editType": "plot", - "valType": "integer" - } - }, - "categories": [ - "svg", - "carpet", - "symbols", - "showLegend", - "carpetDependent", - "zoomScale" - ], - "meta": { - "description": "Plots a scatter trace on either the first carpet axis or the carpet axis with a matching `carpet` attribute.", - "hrName": "scatter_carpet" - }, - "type": "scattercarpet" - }, - "scattergeo": { - "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" - }, - "featureidkey": { - "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Only has an effect when `geojson` is set. Support nested property, for example *properties.name*.", - "dflt": "id", - "editType": "calc", - "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" - }, - "geo": { - "description": "Sets a reference between this trace's geospatial coordinates and a geographic map. If *geo* (the default value), the geospatial coordinates refer to `layout.geo`. If *geo2*, the geospatial coordinates refer to `layout.geo2`, and so on.", - "dflt": "geo", - "editType": "calc", - "valType": "subplotid" - }, - "geojson": { - "description": "Sets optional GeoJSON data associated with this trace. If not given, the features on the base map are used when `locations` is set. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", - "editType": "calc", - "valType": "any" - }, - "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", - "location", - "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 or item in `locations`. 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) or `locations` 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" - }, - "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": "calc", - "valType": "string", - "values": [ - "solid", - "dot", - "dash", - "longdash", - "dashdot", - "longdashdot" - ] - }, - "editType": "calc", - "role": "object", - "width": { - "description": "Sets the line width (in px).", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - } - }, - "locationmode": { - "description": "The library used by the *country names* `locationmode` option is changing in an upcoming version. Country names in existing plots may not work in the new version. Determines the set of locations used to match entries in `locations` to regions on the map. Values *ISO-3*, *USA-states*, *country names* correspond to features on the base map and value *geojson-id* corresponds to features from a custom GeoJSON linked to the `geojson` attribute.", - "dflt": "ISO-3", - "editType": "calc", - "valType": "enumerated", - "values": [ - "ISO-3", - "USA-states", - "country names", - "geojson-id" - ] - }, - "locations": { - "description": "Sets the coordinates via location IDs or names. Coordinates correspond to the centroid of each location given. See `locationmode` for more info.", - "editType": "calc", - "valType": "data_array" - }, - "locationssrc": { - "description": "Sets the source reference on Chart Studio Cloud for `locations`.", - "editType": "none", - "valType": "string" - }, - "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": { - "angle": { - "arrayOk": true, - "description": "Sets the marker angle in respect to `angleref`.", - "dflt": 0, - "editType": "calc", - "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. With *north*, angle 0 points north based on the current map projection.", - "dflt": "up", - "editType": "calc", - "valType": "enumerated", - "values": [ - "previous", - "up", - "north" - ] - }, - "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", - "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": "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" - }, - "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": "calc", - "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", - "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": "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", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "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": { - "arrayOk": true, - "description": "Sets text elements associated with each (lon,lat) pair or item in `locations`. 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) or `locations` 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" - }, - "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 `lat`, `lon`, `location` 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": "scattergeo", - "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", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "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": [ - "geo", - "symbols", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The data visualized as scatter point or lines on a geographic map is provided either by longitude/latitude pairs in `lon` and `lat` respectively or by geographic location IDs or names in `locations`.", - "hrName": "scatter_geo" - }, - "type": "scattergeo" - }, - "scattergl": { - "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" - }, - "dx": { - "description": "Sets the x coordinate step. See `x0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "dy": { - "description": "Sets the y coordinate step. See `y0` for more info.", - "dflt": 1, - "editType": "calc", - "valType": "number" - }, - "error_x": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" - }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", - "editType": "calc", - "valType": "data_array" - }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", - "editType": "none", - "valType": "string" - }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", - "editType": "none", - "valType": "string" - }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "calc", - "valType": "color" - }, - "copy_ystyle": { - "editType": "calc", - "valType": "boolean" - }, - "editType": "calc", - "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean" + "valType": "boolean" }, "thickness": { "description": "Sets the thickness (in px) of the error bars.", "dflt": 2, - "editType": "calc", + "editType": "style", "min": 0, "valType": "number" }, "traceref": { "dflt": 0, - "editType": "calc", + "editType": "style", "min": 0, "valType": "integer" }, "tracerefminus": { "dflt": 0, - "editType": "calc", + "editType": "style", "min": 0, "valType": "integer" }, @@ -69194,120 +60043,178 @@ }, "width": { "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "calc", + "editType": "plot", "min": 0, "valType": "number" } }, - "error_y": { - "array": { - "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "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.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "none", + "tozeroy", + "tozerox", + "tonexty", + "tonextx", + "toself", + "tonext" + ] + }, + "fillcolor": { + "anim": true, + "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available. If fillgradient is specified, fillcolor is ignored except for setting the background color of the hover label, if any.", + "editType": "style", + "valType": "color" + }, + "fillgradient": { + "colorscale": { + "description": "Sets the fill gradient colors as a color scale. The color scale is interpreted as a gradient applied in the direction specified by *orientation*, from the lowest to the highest value of the scatter plot along that axis, or from the center to the most distant point from it, if orientation is *radial*.", + "editType": "style", + "valType": "colorscale" + }, + "description": "Sets a fill gradient. If not specified, the fillcolor is used instead.", + "editType": "calc", + "role": "object", + "start": { + "description": "Sets the gradient start value. It is given as the absolute position on the axis determined by the orientiation. E.g., if orientation is *horizontal*, the gradient will be horizontal and start from the x-position given by start. If omitted, the gradient starts at the lowest value of the trace along the respective axis. Ignored if orientation is *radial*.", "editType": "calc", - "valType": "data_array" + "valType": "number" }, - "arrayminus": { - "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "stop": { + "description": "Sets the gradient end value. It is given as the absolute position on the axis determined by the orientiation. E.g., if orientation is *horizontal*, the gradient will be horizontal and end at the x-position given by end. If omitted, the gradient ends at the highest value of the trace along the respective axis. Ignored if orientation is *radial*.", "editType": "calc", - "valType": "data_array" + "valType": "number" }, - "arrayminussrc": { - "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "type": { + "description": "Sets the type/orientation of the color gradient for the fill. Defaults to *none*.", + "dflt": "none", + "editType": "calc", + "valType": "enumerated", + "values": [ + "radial", + "horizontal", + "vertical", + "none" + ] + } + }, + "fillpattern": { + "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" }, - "arraysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "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" }, - "color": { - "description": "Sets the stroke color of the error bars.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", "role": "object", - "symmetric": { - "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", - "editType": "calc", - "valType": "boolean" - }, - "thickness": { - "description": "Sets the thickness (in px) of the error bars.", - "dflt": 2, - "editType": "calc", - "min": 0, - "valType": "number" - }, - "traceref": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "tracerefminus": { - "dflt": 0, - "editType": "calc", - "min": 0, - "valType": "integer" - }, - "type": { - "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", - "editType": "calc", + "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": [ - "percent", - "constant", - "sqrt", - "data" + "", + "/", + "\\", + "x", + "-", + "|", + "+", + "." ] }, - "value": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", - "dflt": 10, - "editType": "calc", - "min": 0, - "valType": "number" + "shapesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `shape`.", + "editType": "none", + "valType": "string" }, - "valueminus": { - "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", - "dflt": 10, - "editType": "calc", + "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" }, - "visible": { - "description": "Determines whether or not this set of error bars is visible.", - "editType": "calc", - "valType": "boolean" + "sizesrc": { + "description": "Sets the source reference on Chart Studio Cloud for `size`.", + "editType": "none", + "valType": "string" }, - "width": { - "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", - "editType": "calc", + "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" } }, - "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", + "groupnorm": { + "description": "Only relevant when `stackgroup` is used, and only the first `groupnorm` found in the `stackgroup` will be used - including if `visible` is *legendonly* but not if it is `false`. Sets the normalization for the sum of this `stackgroup`. With *fraction*, the value of each trace at each location is divided by the sum of all trace values at that location. *percent* is the same but multiplied by 100 to show percentages. If there are multiple subplots, or multiple `stackgroup`s on one subplot, each will be normalized within its own set.", + "dflt": "", "editType": "calc", "valType": "enumerated", "values": [ - "none", - "tozeroy", - "tozerox", - "tonexty", - "tonextx", - "toself", - "tonext" + "", + "fraction", + "percent" ] }, - "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.", @@ -69537,6 +60444,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 ``.", @@ -69559,7 +60475,7 @@ "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": "calc", + "editType": "style", "valType": "string" }, "hovertextsrc": { @@ -69568,6 +60484,7 @@ "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" @@ -69701,56 +60618,98 @@ "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": { + "anim": true, "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", + "editType": "plot", "role": "object", "shape": { - "description": "Determines the line shape. The values correspond to step-wise line shapes.", + "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": "calc", + "editType": "plot", "valType": "enumerated", "values": [ "linear", + "spline", "hv", "vh", "hvh", "vhv" ] }, + "simplify": { + "description": "Simplifies lines by removing nearly-collinear points. When transitioning lines, it may be desirable to disable this so that the number of points along the resulting SVG path is unaffected.", + "dflt": true, + "editType": "plot", + "valType": "boolean" + }, + "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": { + "anim": true, "description": "Sets the line width (in px).", "dflt": 2, - "editType": "calc", + "editType": "style", "min": 0, "valType": "number" } }, "marker": { "angle": { + "anim": false, "arrayOk": true, "description": "Sets the marker angle in respect to `angleref`.", "dflt": 0, - "editType": "calc", + "editType": "plot", "valType": "angle" }, + "angleref": { + "anim": false, + "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", @@ -69773,7 +60732,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 }, @@ -69789,16 +60748,17 @@ "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 }, "valType": "number" }, "color": { + "anim": true, "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": { @@ -69812,35 +60772,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", @@ -69855,20 +60815,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", @@ -69878,21 +60838,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", @@ -69902,13 +60862,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" }, @@ -69916,13 +60876,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", @@ -69934,13 +60894,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", @@ -69952,7 +60912,7 @@ "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -69964,14 +60924,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", @@ -69980,7 +60940,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" }, @@ -69989,25 +60949,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" @@ -70015,7 +60975,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" ], @@ -70030,18 +60990,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", @@ -70051,7 +61011,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", @@ -70063,7 +61023,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -70077,7 +61037,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -70090,7 +61050,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": { @@ -70098,41 +61058,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" } } @@ -70141,7 +61101,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", @@ -70152,7 +61112,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", @@ -70170,20 +61130,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": [ @@ -70195,13 +61155,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", @@ -70212,12 +61172,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": { @@ -70227,7 +61187,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": { @@ -70238,22 +61198,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" @@ -70261,7 +61221,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" ], @@ -70276,18 +61236,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", @@ -70297,7 +61257,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", @@ -70309,7 +61269,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -70323,7 +61283,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -70336,7 +61296,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", @@ -70346,18 +61306,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", @@ -70368,14 +61328,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", @@ -70384,12 +61344,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", @@ -70400,14 +61360,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", @@ -70430,6 +61390,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.", @@ -70448,7 +61441,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 }, @@ -70464,16 +61457,17 @@ "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 }, "valType": "number" }, "color": { + "anim": true, "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": { @@ -70501,14 +61495,15 @@ "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": { + "anim": true, "arrayOk": true, "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "calc", + "editType": "style", "min": 0, "valType": "number" }, @@ -70518,10 +61513,18 @@ "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": { + "anim": true, "arrayOk": true, "description": "Sets the marker opacity.", - "editType": "calc", + "editType": "style", "max": 1, "min": 0, "valType": "number" @@ -70534,7 +61537,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", @@ -70545,6 +61548,7 @@ "valType": "boolean" }, "size": { + "anim": true, "arrayOk": true, "description": "Sets the marker size (in px).", "dflt": 6, @@ -70580,11 +61584,25 @@ "editType": "none", "valType": "string" }, + "standoff": { + "anim": true, + "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, @@ -71093,7 +62111,2821 @@ "valType": "string" }, "mode": { - "description": "Determines the drawing mode for this scatter trace.", + "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" + }, + "offsetgroup": { + "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "opacity": { + "description": "Sets the opacity of the trace.", + "dflt": 1, + "editType": "style", + "max": 1, + "min": 0, + "valType": "number" + }, + "orientation": { + "description": "Only relevant in the following cases: 1. when `scattermode` is set to *group*. 2. when `stackgroup` is used, and only the first `orientation` found in the `stackgroup` will be used - including if `visible` is *legendonly* but not if it is `false`. Sets the stacking direction. With *v* (*h*), the y (x) values of subsequent traces are added. Also affects the default value of `fill`.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "v", + "h" + ] + }, + "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" + }, + "stackgaps": { + "description": "Only relevant when `stackgroup` is used, and only the first `stackgaps` found in the `stackgroup` will be used - including if `visible` is *legendonly* but not if it is `false`. Determines how we handle locations at which other traces in this group have data but this one does not. With *infer zero* we insert a zero at these locations. With *interpolate* we linearly interpolate between existing values, and extrapolate a constant beyond the existing values.", + "dflt": "infer zero", + "editType": "calc", + "valType": "enumerated", + "values": [ + "infer zero", + "interpolate" + ] + }, + "stackgroup": { + "description": "Set several scatter traces (on the same subplot) to the same stackgroup in order to add their y values (or their x values if `orientation` is *h*). If blank or omitted this trace will not be stacked. Stacking also turns `fill` on by default, using *tonexty* (*tonextx*) if `orientation` is *h* (*v*) and sets the default `mode` to *lines* irrespective of point count. You can only stack on a numeric (linear or log) axis. 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": "", + "editType": "calc", + "valType": "string" + }, + "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": { + "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. ", + "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": "scatter", + "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", + "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" + ] + }, + "x": { + "anim": true, + "description": "Sets the x coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "x0": { + "anim": true, + "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "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" + }, + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ] + }, + "xhoverformat": { + "description": "Sets the hover text formatting rulefor `x` 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*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "xperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any" + }, + "xperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any" + }, + "xperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ] + }, + "xsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `x`.", + "editType": "none", + "valType": "string" + }, + "y": { + "anim": true, + "description": "Sets the y coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "y0": { + "anim": true, + "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "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" + }, + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ] + }, + "yhoverformat": { + "description": "Sets the hover text formatting rulefor `y` 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*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "none", + "valType": "string" + }, + "yperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any" + }, + "yperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any" + }, + "yperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ] + }, + "ysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `y`.", + "editType": "none", + "valType": "string" + }, + "zorder": { + "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", + "dflt": 0, + "editType": "plot", + "valType": "integer" + } + }, + "categories": [ + "cartesian", + "svg", + "symbols", + "errorBarsOK", + "showLegend", + "scatter-like", + "zoomScale" + ], + "layoutAttributes": { + "scattergap": { + "description": "Sets the gap (in plot fraction) between scatter points of adjacent location coordinates. Defaults to `bargap`.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "scattermode": { + "description": "Determines how scatter points at the same location coordinate are displayed on the graph. With *group*, the scatter points are plotted next to one another centered around the shared location. With *overlay*, the scatter points are plotted over one another, you might need to reduce *opacity* to see multiple scatter points.", + "dflt": "overlay", + "editType": "calc", + "valType": "enumerated", + "values": [ + "group", + "overlay" + ] + } + }, + "meta": { + "description": "The scatter trace type encompasses line charts, scatter charts, text charts, and bubble charts. The data visualized as scatter point or lines is set in `x` and `y`. 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." + }, + "type": "scatter" + }, + "scatter3d": { + "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" + }, + "error_x": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminussrc": { + "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "editType": "none", + "valType": "string" + }, + "arraysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "calc", + "valType": "color" + }, + "copy_zstyle": { + "editType": "calc", + "valType": "boolean" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean" + }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "traceref": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "tracerefminus": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "percent", + "constant", + "sqrt", + "data" + ] + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "error_y": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminussrc": { + "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "editType": "none", + "valType": "string" + }, + "arraysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "calc", + "valType": "color" + }, + "copy_zstyle": { + "editType": "calc", + "valType": "boolean" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean" + }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "traceref": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "tracerefminus": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "percent", + "constant", + "sqrt", + "data" + ] + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "error_z": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminussrc": { + "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "editType": "none", + "valType": "string" + }, + "arraysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean" + }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "traceref": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "tracerefminus": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "percent", + "constant", + "sqrt", + "data" + ] + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "calc", + "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": "calc", + "extras": [ + "all", + "none", + "skip" + ], + "flags": [ + "x", + "y", + "z", + "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 text elements associated with each (x,y,z) triplet. 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,z) 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" + }, + "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": { + "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": 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 `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": "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 `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": null, + "editType": "calc", + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" + }, + "colorsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `color`.", + "editType": "none", + "valType": "string" + }, + "dash": { + "description": "Sets the dash style of the lines.", + "dflt": "solid", + "editType": "calc", + "valType": "enumerated", + "values": [ + "dash", + "dashdot", + "dot", + "longdash", + "longdashdot", + "solid" + ] + }, + "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": "calc", + "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" + }, + "width": { + "description": "Sets the line width (in px).", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "marker": { + "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": false, + "description": "Sets the width (in px) of the lines bounding the marker points.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "opacity": { + "arrayOk": false, + "description": "Sets the marker opacity. Note that the marker opacity for scatter3d traces must be a scalar value for performance reasons. To set a blending opacity value (i.e. which is not transparent), set *marker.color* to an rgba color and use its alpha channel.", + "editType": "calc", + "max": 1, + "min": 0, + "valType": "number" + }, + "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": 8, + "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.", + "dflt": "circle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "circle", + "circle-open", + "cross", + "diamond", + "diamond-open", + "square", + "square-open", + "x" + ] + }, + "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": "lines+markers", "editType": "calc", "extras": [ "none" @@ -71118,45 +64950,93 @@ "min": 0, "valType": "number" }, - "selected": { + "projection": { "editType": "calc", - "marker": { - "color": { - "description": "Sets the marker color of selected points.", + "role": "object", + "x": { + "editType": "calc", + "opacity": { + "description": "Sets the projection color.", + "dflt": 1, "editType": "calc", - "valType": "color" + "max": 1, + "min": 0, + "valType": "number" + }, + "role": "object", + "scale": { + "description": "Sets the scale factor determining the size of the projection marker points.", + "dflt": 0.6666666666666666, + "editType": "calc", + "max": 10, + "min": 0, + "valType": "number" }, + "show": { + "description": "Sets whether or not projections are shown along the x axis.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + } + }, + "y": { "editType": "calc", "opacity": { - "description": "Sets the marker opacity of selected points.", + "description": "Sets the projection color.", + "dflt": 1, "editType": "calc", "max": 1, "min": 0, "valType": "number" }, "role": "object", - "size": { - "description": "Sets the marker size of selected points.", + "scale": { + "description": "Sets the scale factor determining the size of the projection marker points.", + "dflt": 0.6666666666666666, "editType": "calc", + "max": 10, "min": 0, "valType": "number" + }, + "show": { + "description": "Sets whether or not projections are shown along the y axis.", + "dflt": false, + "editType": "calc", + "valType": "boolean" } }, - "role": "object", - "textfont": { - "color": { - "description": "Sets the text font color of selected points.", + "z": { + "editType": "calc", + "opacity": { + "description": "Sets the projection color.", + "dflt": 1, "editType": "calc", - "valType": "color" + "max": 1, + "min": 0, + "valType": "number" }, - "editType": "calc", - "role": "object" + "role": "object", + "scale": { + "description": "Sets the scale factor determining the size of the projection marker points.", + "dflt": 0.6666666666666666, + "editType": "calc", + "max": 10, + "min": 0, + "valType": "number" + }, + "show": { + "description": "Sets whether or not projections are shown along the z axis.", + "dflt": false, + "editType": "calc", + "valType": "boolean" + } } }, - "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" + "scene": { + "description": "Sets a reference between this trace's 3D coordinate system and a 3D scene. If *scene* (the default value), the (x,y,z) coordinates refer to `layout.scene`. If *scene2*, the (x,y,z) coordinates refer to `layout.scene2`, and so on.", + "dflt": "scene", + "editType": "calc+clearAxisTypes", + "valType": "subplotid" }, "showlegend": { "description": "Determines whether or not an item corresponding to this trace is shown in the legend.", @@ -71183,9 +65063,26 @@ "valType": "string" } }, + "surfaceaxis": { + "description": "If *-1*, the scatter points are not fill with a surface If *0*, *1*, *2*, the scatter points are filled with a Delaunay surface about the x, y, z respectively.", + "dflt": -1, + "editType": "calc", + "valType": "enumerated", + "values": [ + -1, + 0, + 1, + 2 + ] + }, + "surfacecolor": { + "description": "Sets the surface fill color.", + "editType": "calc", + "valType": "color" + }, "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 (x,y,z) triplet. 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,z) 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" @@ -71265,11 +65162,13 @@ "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", "editType": "calc", - "valType": "enumerated", - "values": [ + "extras": [ "normal", "bold" - ] + ], + "max": 1000, + "min": 1, + "valType": "integer" }, "weightsrc": { "description": "Sets the source reference on Chart Studio Cloud for `weight`.", @@ -71280,7 +65179,7 @@ "textposition": { "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", - "dflt": "middle center", + "dflt": "top center", "editType": "calc", "valType": "enumerated", "values": [ @@ -71323,7 +65222,7 @@ "editType": "none", "valType": "string" }, - "type": "scattergl", + "type": "scatter3d", "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", @@ -71334,41 +65233,6 @@ "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", - "textfont": { - "color": { - "description": "Sets the text font color of unselected points, applied only when a selection exists.", - "editType": "calc", - "valType": "color" - }, - "editType": "calc", - "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, @@ -71385,18 +65249,6 @@ "editType": "calc+clearAxisTypes", "valType": "data_array" }, - "x0": { - "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "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" - }, "xcalendar": { "description": "Sets the calendar system to use with `x` date data.", "dflt": "gregorian", @@ -71427,28 +65279,6 @@ "editType": "calc", "valType": "string" }, - "xperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any" - }, - "xperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", - "editType": "calc", - "valType": "any" - }, - "xperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", - "dflt": "middle", - "editType": "calc", - "valType": "enumerated", - "values": [ - "start", - "middle", - "end" - ] - }, "xsrc": { "description": "Sets the source reference on Chart Studio Cloud for `x`.", "editType": "none", @@ -71459,18 +65289,6 @@ "editType": "calc+clearAxisTypes", "valType": "data_array" }, - "y0": { - "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", - "dflt": 0, - "editType": "calc+clearAxisTypes", - "valType": "any" - }, - "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" - }, "ycalendar": { "description": "Sets the calendar system to use with `y` date data.", "dflt": "gregorian", @@ -71501,124 +65319,91 @@ "editType": "calc", "valType": "string" }, - "yperiod": { - "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", - "dflt": 0, - "editType": "calc", - "valType": "any" + "ysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `y`.", + "editType": "none", + "valType": "string" }, - "yperiod0": { - "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", - "editType": "calc", - "valType": "any" + "z": { + "description": "Sets the z coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" }, - "yperiodalignment": { - "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", - "dflt": "middle", + "zcalendar": { + "description": "Sets the calendar system to use with `z` date data.", + "dflt": "gregorian", "editType": "calc", "valType": "enumerated", "values": [ - "start", - "middle", - "end" + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" ] }, - "ysrc": { - "description": "Sets the source reference on Chart Studio Cloud for `y`.", + "zhoverformat": { + "description": "Sets the hover text formatting rulefor `z` 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*By default the values are formatted using `zaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "zsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `z`.", "editType": "none", "valType": "string" } }, "categories": [ - "gl", - "regl", - "cartesian", - "symbols", - "errorBarsOK", - "showLegend", - "scatter-like" - ], - "meta": { - "description": "The data visualized as scatter point or lines is set in `x` and `y` using the WebGL plotting engine. Bubble charts are achieved by setting `marker.size` and/or `marker.color` to a numerical arrays.", - "hrName": "scatter_gl" - }, - "type": "scattergl" - }, - "scattermap": { - "animatable": false, - "attributes": { - "below": { - "description": "Determines if this scattermap trace's layers are to be inserted before the layer with the specified ID. By default, scattermap layers are inserted above all the base layers. To place the scattermap 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" - } + "gl3d", + "symbols", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "The data visualized as scatter point or lines in 3D dimension is set in `x`, `y`, `z`. 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` Projections are achieved via `projection`. Surface fills are achieved via `surfaceaxis`.", + "hrName": "scatter_3d" + }, + "type": "scatter3d" + }, + "scattercarpet": { + "animatable": false, + "attributes": { + "a": { + "description": "Sets the a-axis coordinates.", + "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 b-axis coordinates.", + "editType": "calc", + "valType": "data_array" + }, + "bsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `b`.", + "editType": "none", + "valType": "string" + }, + "carpet": { + "description": "An identifier for this carpet, so that `scattercarpet` and `contourcarpet` traces can specify a carpet plot on which they lie", + "editType": "calc", + "valType": "string" }, "connectgaps": { "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.", @@ -71637,33 +65422,34 @@ "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.", + "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" + "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": { "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", + "editType": "none", "extras": [ "all", "none", "skip" ], "flags": [ - "lon", - "lat", + "a", + "b", "text", "name" ], @@ -71879,17 +65665,26 @@ "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": "calc", + "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": "calc", + "editType": "none", "valType": "any" }, "hovertemplatesrc": { @@ -71899,9 +65694,9 @@ }, "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.", + "description": "Sets hover text elements associated with each (a,b) 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). To be seen, trace `hoverinfo` must contain a *text* flag.", "dflt": "", - "editType": "calc", + "editType": "style", "valType": "string" }, "hovertextsrc": { @@ -71919,16 +65714,6 @@ "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", @@ -72053,44 +65838,83 @@ "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 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": "calc", + "editType": "style", "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" + "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`.", @@ -72114,7 +65938,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 }, @@ -72130,7 +65954,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 }, @@ -72139,7 +65963,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": { @@ -72153,35 +65977,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", @@ -72196,20 +66020,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", @@ -72219,21 +66043,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", @@ -72243,13 +66067,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" }, @@ -72257,13 +66081,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", @@ -72275,13 +66099,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", @@ -72293,7 +66117,7 @@ "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -72305,14 +66129,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", @@ -72321,7 +66145,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" }, @@ -72330,25 +66154,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" @@ -72356,7 +66180,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" ], @@ -72371,18 +66195,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", @@ -72392,7 +66216,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", @@ -72404,7 +66228,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -72418,7 +66242,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -72431,7 +66255,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": { @@ -72439,41 +66263,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" } } @@ -72482,7 +66306,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", @@ -72493,7 +66317,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", @@ -72511,20 +66335,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": [ @@ -72536,13 +66360,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", @@ -72553,12 +66377,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": { @@ -72568,7 +66392,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": { @@ -72579,22 +66403,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" @@ -72602,7 +66426,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" ], @@ -72617,18 +66441,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", @@ -72638,7 +66462,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", @@ -72650,7 +66474,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -72664,7 +66488,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -72677,7 +66501,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", @@ -72687,18 +66511,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", @@ -72709,14 +66533,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", @@ -72725,12 +66549,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", @@ -72741,14 +66565,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", @@ -72771,10 +66595,138 @@ "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": "calc", + "editType": "style", "max": 1, "min": 0, "valType": "number" @@ -72787,7 +66739,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", @@ -72822,24 +66774,525 @@ "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" - }, + "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", @@ -72858,7 +67311,7 @@ "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.", + "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": [ @@ -72885,17 +67338,17 @@ "valType": "number" }, "selected": { - "editType": "calc", + "editType": "style", "marker": { "color": { "description": "Sets the marker color of selected points.", - "editType": "calc", + "editType": "style", "valType": "color" }, - "editType": "calc", + "editType": "style", "opacity": { "description": "Sets the marker opacity of selected points.", - "editType": "calc", + "editType": "style", "max": 1, "min": 0, "valType": "number" @@ -72903,12 +67356,21 @@ "role": "object", "size": { "description": "Sets the marker size of selected points.", - "editType": "calc", + "editType": "style", "min": 0, "valType": "number" } }, - "role": "object" + "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.", @@ -72940,41 +67402,85 @@ "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.", + "description": "Sets text elements associated with each (a,b) 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). 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", + "arrayOk": true, + "editType": "style", "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*.", + "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.", - "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", @@ -72984,7 +67490,51 @@ "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", @@ -72995,10 +67545,15 @@ "max": 1000, "min": 1, "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" } }, "textposition": { - "arrayOk": false, + "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", "dflt": "middle center", "editType": "calc", @@ -73015,6 +67570,11 @@ "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", @@ -73022,15 +67582,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 `lat`, `lon` 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 `a`, `b` and `text`.", "dflt": "", - "editType": "calc", + "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": "calc", + "editType": "plot", "valType": "any" }, "texttemplatesrc": { @@ -73038,7 +67598,7 @@ "editType": "none", "valType": "string" }, - "type": "scattermap", + "type": "scattercarpet", "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", @@ -73050,17 +67610,17 @@ "valType": "any" }, "unselected": { - "editType": "calc", + "editType": "style", "marker": { "color": { "description": "Sets the marker color of unselected points, applied only when a selection exists.", - "editType": "calc", + "editType": "style", "valType": "color" }, - "editType": "calc", + "editType": "style", "opacity": { "description": "Sets the marker opacity of unselected points, applied only when a selection exists.", - "editType": "calc", + "editType": "style", "max": 1, "min": 0, "valType": "number" @@ -73068,12 +67628,21 @@ "role": "object", "size": { "description": "Sets the marker size of unselected points, applied only when a selection exists.", - "editType": "calc", + "editType": "style", "min": 0, "valType": "number" } }, - "role": "object" + "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).", @@ -73085,97 +67654,43 @@ false, "legendonly" ] + }, + "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" + }, + "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" + }, + "zorder": { + "description": "Sets the layer on which this trace is displayed, relative to other SVG traces on the same subplot. SVG traces with higher `zorder` appear in front of those with lower `zorder`.", + "dflt": 0, + "editType": "plot", + "valType": "integer" } }, "categories": [ - "map", - "gl", + "svg", + "carpet", "symbols", "showLegend", - "scatter-like" + "carpetDependent", + "zoomScale" ], "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" + "description": "Plots a scatter trace on either the first carpet axis or the carpet axis with a matching `carpet` attribute.", + "hrName": "scatter_carpet" }, - "type": "scattermap" + "type": "scattercarpet" }, - "scattermapbox": { + "scattergeo": { "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, @@ -73192,6 +67707,12 @@ "editType": "none", "valType": "string" }, + "featureidkey": { + "description": "Sets the key in GeoJSON features which is used as id to match the items included in the `locations` array. Only has an effect when `geojson` is set. Support nested property, for example *properties.name*.", + "dflt": "id", + "editType": "calc", + "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", @@ -73205,7 +67726,18 @@ "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" + "valType": "color" + }, + "geo": { + "description": "Sets a reference between this trace's geospatial coordinates and a geographic map. If *geo* (the default value), the geospatial coordinates refer to `layout.geo`. If *geo2*, the geospatial coordinates refer to `layout.geo2`, and so on.", + "dflt": "geo", + "editType": "calc", + "valType": "subplotid" + }, + "geojson": { + "description": "Sets optional GeoJSON data associated with this trace. If not given, the features on the base map are used when `locations` is set. It can be set as a valid GeoJSON object or as a URL string. Note that we only accept GeoJSONs of type *FeatureCollection* or *Feature* with geometries of type *Polygon* or *MultiPolygon*.", + "editType": "calc", + "valType": "any" }, "hoverinfo": { "arrayOk": true, @@ -73220,6 +67752,7 @@ "flags": [ "lon", "lat", + "location", "text", "name" ], @@ -73455,7 +67988,7 @@ }, "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.", + "description": "Sets hover text elements associated with each (lon,lat) pair or item in `locations`. 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) or `locations` coordinates. To be seen, trace `hoverinfo` must contain a *text* flag.", "dflt": "", "editType": "calc", "valType": "string" @@ -73614,6 +68147,20 @@ "editType": "calc", "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": "calc", + "valType": "string", + "values": [ + "solid", + "dot", + "dash", + "longdash", + "dashdot", + "longdashdot" + ] + }, "editType": "calc", "role": "object", "width": { @@ -73624,6 +68171,28 @@ "valType": "number" } }, + "locationmode": { + "description": "The library used by the *country names* `locationmode` option is changing in an upcoming version. Country names in existing plots may not work in the new version. Determines the set of locations used to match entries in `locations` to regions on the map. Values *ISO-3*, *USA-states*, *country names* correspond to features on the base map and value *geojson-id* corresponds to features from a custom GeoJSON linked to the `geojson` attribute.", + "dflt": "ISO-3", + "editType": "calc", + "valType": "enumerated", + "values": [ + "ISO-3", + "USA-states", + "country names", + "geojson-id" + ] + }, + "locations": { + "description": "Sets the coordinates via location IDs or names. Coordinates correspond to the centroid of each location given. See `locationmode` for more info.", + "editType": "calc", + "valType": "data_array" + }, + "locationssrc": { + "description": "Sets the source reference on Chart Studio Cloud for `locations`.", + "editType": "none", + "valType": "string" + }, "lon": { "description": "Sets the longitude coordinates (in degrees East).", "editType": "calc", @@ -73635,18 +68204,23 @@ "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", + "description": "Sets the marker angle in respect to `angleref`.", + "dflt": 0, "editType": "calc", - "valType": "number" + "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. With *north*, angle 0 points north based on the current map projection.", + "dflt": "up", + "editType": "calc", + "valType": "enumerated", + "values": [ + "previous", + "up", + "north" + ] }, "anglesrc": { "description": "Sets the source reference on Chart Studio Cloud for `angle`.", @@ -74327,6 +68901,127 @@ "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": "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.", @@ -74378,24 +69073,525 @@ "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" - }, + "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": "calc", + "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", + "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", @@ -74414,7 +69610,7 @@ "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.", + "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": [ @@ -74464,7 +69660,16 @@ "valType": "number" } }, - "role": "object" + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "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.", @@ -74496,41 +69701,85 @@ "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.", + "description": "Sets text elements associated with each (lon,lat) pair or item in `locations`. 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) or `locations` 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" }, - "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*.", + "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.", - "dflt": "Open Sans Regular, Arial Unicode MS Regular", "editType": "calc", - "noBlank": true, - "strict": true, + "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", @@ -74540,7 +69789,51 @@ "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", @@ -74551,10 +69844,15 @@ "max": 1000, "min": 1, "valType": "integer" + }, + "weightsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `weight`.", + "editType": "none", + "valType": "string" } }, "textposition": { - "arrayOk": false, + "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", "dflt": "middle center", "editType": "calc", @@ -74571,6 +69869,11 @@ "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", @@ -74578,7 +69881,7 @@ }, "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`.", + "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`, `location` and `text`.", "dflt": "", "editType": "calc", "valType": "string" @@ -74594,7 +69897,7 @@ "editType": "none", "valType": "string" }, - "type": "scattermapbox", + "type": "scattergeo", "uid": { "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions.", "editType": "plot", @@ -74629,7 +69932,16 @@ "valType": "number" } }, - "role": "object" + "role": "object", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "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).", @@ -74644,27 +69956,20 @@ } }, "categories": [ - "mapbox", - "gl", + "geo", "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" + "description": "The data visualized as scatter point or lines on a geographic map is provided either by longitude/latitude pairs in `lon` and `lat` respectively or by geographic location IDs or names in `locations`.", + "hrName": "scatter_geo" }, - "type": "scattermapbox" + "type": "scattergeo" }, - "scatterpolar": { + "scattergl": { "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, @@ -74681,31 +69986,218 @@ "editType": "none", "valType": "string" }, - "dr": { - "description": "Sets the r coordinate step.", + "dx": { + "description": "Sets the x coordinate step. See `x0` for more info.", "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.", + "dy": { + "description": "Sets the y coordinate step. See `y0` for more info.", + "dflt": 1, "editType": "calc", "valType": "number" }, + "error_x": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminussrc": { + "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "editType": "none", + "valType": "string" + }, + "arraysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "calc", + "valType": "color" + }, + "copy_ystyle": { + "editType": "calc", + "valType": "boolean" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean" + }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "traceref": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "tracerefminus": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "percent", + "constant", + "sqrt", + "data" + ] + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "calc", + "min": 0, + "valType": "number" + } + }, + "error_y": { + "array": { + "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminus": { + "description": "Sets the data corresponding the length of each error bar in the bottom (left) direction for vertical (horizontal) bars Values are plotted relative to the underlying data.", + "editType": "calc", + "valType": "data_array" + }, + "arrayminussrc": { + "description": "Sets the source reference on Chart Studio Cloud for `arrayminus`.", + "editType": "none", + "valType": "string" + }, + "arraysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `array`.", + "editType": "none", + "valType": "string" + }, + "color": { + "description": "Sets the stroke color of the error bars.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "role": "object", + "symmetric": { + "description": "Determines whether or not the error bars have the same length in both direction (top/bottom for vertical bars, left/right for horizontal bars.", + "editType": "calc", + "valType": "boolean" + }, + "thickness": { + "description": "Sets the thickness (in px) of the error bars.", + "dflt": 2, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "traceref": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "tracerefminus": { + "dflt": 0, + "editType": "calc", + "min": 0, + "valType": "integer" + }, + "type": { + "description": "Determines the rule used to generate the error bars. If *constant*, the bar lengths are of a constant value. Set this constant in `value`. If *percent*, the bar lengths correspond to a percentage of underlying data. Set this percentage in `value`. If *sqrt*, the bar lengths correspond to the square of the underlying data. If *data*, the bar lengths are set with data set `array`.", + "editType": "calc", + "valType": "enumerated", + "values": [ + "percent", + "constant", + "sqrt", + "data" + ] + }, + "value": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars.", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "valueminus": { + "description": "Sets the value of either the percentage (if `type` is set to *percent*) or the constant (if `type` is set to *constant*) corresponding to the lengths of the error bars in the bottom (left) direction for vertical (horizontal) bars", + "dflt": 10, + "editType": "calc", + "min": 0, + "valType": "number" + }, + "visible": { + "description": "Determines whether or not this set of error bars is visible.", + "editType": "calc", + "valType": "boolean" + }, + "width": { + "description": "Sets the width (in px) of the cross-bar at both ends of the error bars.", + "editType": "calc", + "min": 0, + "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.", + "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": "style", + "editType": "calc", "valType": "color" }, "hoverinfo": { @@ -74719,8 +70211,9 @@ "skip" ], "flags": [ - "r", - "theta", + "x", + "y", + "z", "text", "name" ], @@ -74936,15 +70429,6 @@ "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 ``.", @@ -74967,7 +70451,7 @@ "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", + "editType": "calc", "valType": "string" }, "hovertextsrc": { @@ -75109,62 +70593,44 @@ "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", + "editType": "calc", "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*).", + "description": "Sets the style of the lines.", "dflt": "solid", - "editType": "style", - "valType": "string", + "editType": "calc", + "valType": "enumerated", "values": [ - "solid", - "dot", "dash", - "longdash", "dashdot", - "longdashdot" + "dot", + "longdash", + "longdashdot", + "solid" ] }, "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.", + "description": "Determines the line shape. The values correspond to step-wise line shapes.", "dflt": "linear", - "editType": "plot", + "editType": "calc", "valType": "enumerated", "values": [ "linear", - "spline" + "hv", + "vh", + "hvh", + "vhv" ] }, - "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", + "editType": "calc", "min": 0, "valType": "number" } @@ -75174,19 +70640,9 @@ "arrayOk": true, "description": "Sets the marker angle in respect to `angleref`.", "dflt": 0, - "editType": "plot", + "editType": "calc", "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", @@ -75209,7 +70665,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": "plot", + "editType": "calc", "impliedEdits": { "cauto": false }, @@ -75225,7 +70681,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": "plot", + "editType": "calc", "impliedEdits": { "cauto": false }, @@ -75234,7 +70690,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": "style", + "editType": "calc", "valType": "color" }, "coloraxis": { @@ -75248,35 +70704,35 @@ "bgcolor": { "description": "Sets the color of padded area.", "dflt": "rgba(0,0,0,0)", - "editType": "colorbars", + "editType": "calc", "valType": "color" }, "bordercolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "colorbars", + "editType": "calc", "valType": "color" }, "borderwidth": { "description": "Sets the width (in px) or the border enclosing this color bar.", "dflt": 0, - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "impliedEdits": { "tickmode": "linear" }, "valType": "any" }, - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "none", @@ -75291,20 +70747,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": "colorbars", + "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": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "fraction", @@ -75314,21 +70770,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": "colorbars", + "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": "colorbars", + "editType": "calc", "min": 0, "valType": "integer" }, "orientation": { "description": "Sets the orientation of the colorbar.", "dflt": "v", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "h", @@ -75338,13 +70794,13 @@ "outlinecolor": { "description": "Sets the axis line color.", "dflt": "#444", - "editType": "colorbars", + "editType": "calc", "valType": "color" }, "outlinewidth": { "description": "Sets the width (in px) of the axis line.", "dflt": 1, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number" }, @@ -75352,13 +70808,13 @@ "separatethousands": { "description": "If \"true\", even 4-digit integers are separated", "dflt": false, - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "all", @@ -75370,13 +70826,13 @@ "showticklabels": { "description": "Determines whether or not the tick labels are drawn.", "dflt": true, - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "all", @@ -75388,7 +70844,7 @@ "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", "dflt": "all", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "all", @@ -75400,14 +70856,14 @@ "thickness": { "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.", "dflt": 30, - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "fraction", @@ -75416,7 +70872,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": "colorbars", + "editType": "calc", "impliedEdits": { "tickmode": "linear" }, @@ -75425,25 +70881,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": "colorbars", + "editType": "calc", "valType": "angle" }, "tickcolor": { "description": "Sets the tick color.", "dflt": "#444", - "editType": "colorbars", + "editType": "calc", "valType": "color" }, "tickfont": { "color": { - "editType": "colorbars", + "editType": "calc", "valType": "color" }, "description": "Sets the color bar's tick label font", - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "noBlank": true, "strict": true, "valType": "string" @@ -75451,7 +70907,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": "colorbars", + "editType": "calc", "extras": [ "none" ], @@ -75466,18 +70922,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": "colorbars", + "editType": "calc", "valType": "string" }, "size": { - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -75487,7 +70943,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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -75499,7 +70955,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -75513,7 +70969,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "extras": [ "normal", "bold" @@ -75526,7 +70982,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": "colorbars", + "editType": "calc", "valType": "string" }, "tickformatstops": { @@ -75534,41 +70990,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": "colorbars", + "editType": "calc", "items": [ { - "editType": "colorbars", + "editType": "calc", "valType": "any" }, { - "editType": "colorbars", + "editType": "calc", "valType": "any" } ], "valType": "info_array" }, - "editType": "colorbars", + "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": "colorbars", + "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": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "string" }, "value": { "description": "string - dtickformat for described zoom level, the same as *tickformat*", "dflt": "", - "editType": "colorbars", + "editType": "calc", "valType": "string" } } @@ -75577,7 +71033,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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "allow", @@ -75588,7 +71044,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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "outside", @@ -75606,20 +71062,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": "colorbars", + "editType": "calc", "min": 1, "valType": "integer" }, "ticklen": { "description": "Sets the tick length (in px).", "dflt": 5, - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "impliedEdits": {}, "valType": "enumerated", "values": [ @@ -75631,13 +71087,13 @@ "tickprefix": { "description": "Sets a tick label prefix.", "dflt": "", - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "outside", @@ -75648,12 +71104,12 @@ "ticksuffix": { "description": "Sets a tick label suffix.", "dflt": "", - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "data_array" }, "ticktextsrc": { @@ -75663,7 +71119,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": "colorbars", + "editType": "calc", "valType": "data_array" }, "tickvalssrc": { @@ -75674,22 +71130,22 @@ "tickwidth": { "description": "Sets the tick width (in px).", "dflt": 1, - "editType": "colorbars", + "editType": "calc", "min": 0, "valType": "number" }, "title": { - "editType": "colorbars", + "editType": "calc", "font": { "color": { - "editType": "colorbars", + "editType": "calc", "valType": "color" }, "description": "Sets this color bar's title font.", - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "noBlank": true, "strict": true, "valType": "string" @@ -75697,7 +71153,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": "colorbars", + "editType": "calc", "extras": [ "none" ], @@ -75712,18 +71168,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": "colorbars", + "editType": "calc", "valType": "string" }, "size": { - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -75733,7 +71189,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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -75745,7 +71201,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "normal", @@ -75759,7 +71215,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "colorbars", + "editType": "calc", "extras": [ "normal", "bold" @@ -75772,7 +71228,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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "right", @@ -75782,18 +71238,18 @@ }, "text": { "description": "Sets the title of the color bar.", - "editType": "colorbars", + "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": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "left", @@ -75804,14 +71260,14 @@ "xpad": { "description": "Sets the amount of padding (in px) along the x direction.", "dflt": 10, - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "container", @@ -75820,12 +71276,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": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "top", @@ -75836,14 +71292,14 @@ "ypad": { "description": "Sets the amount of padding (in px) along the y direction.", "dflt": 10, - "editType": "colorbars", + "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": "colorbars", + "editType": "calc", "valType": "enumerated", "values": [ "container", @@ -75866,39 +71322,6 @@ "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.", @@ -75917,7 +71340,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": "plot", + "editType": "calc", "impliedEdits": { "cauto": false }, @@ -75933,7 +71356,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": "plot", + "editType": "calc", "impliedEdits": { "cauto": false }, @@ -75942,7 +71365,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": "style", + "editType": "calc", "valType": "color" }, "coloraxis": { @@ -75970,14 +71393,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": "plot", + "editType": "calc", "valType": "boolean" }, "role": "object", "width": { "arrayOk": true, "description": "Sets the width (in px) of the lines bounding the marker points.", - "editType": "style", + "editType": "calc", "min": 0, "valType": "number" }, @@ -75987,17 +71410,10 @@ "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", + "editType": "calc", "max": 1, "min": 0, "valType": "number" @@ -76010,7 +71426,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": "plot", + "editType": "calc", "valType": "boolean" }, "role": "object", @@ -76056,24 +71472,11 @@ "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", + "editType": "calc", "valType": "enumerated", "values": [ 0, @@ -76582,7 +71985,3329 @@ "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.", + "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": "calc", + "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", + "textfont": { + "color": { + "description": "Sets the text font color of selected points.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "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": { + "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. ", + "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": "scattergl", + "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", + "textfont": { + "color": { + "description": "Sets the text font color of unselected points, applied only when a selection exists.", + "editType": "calc", + "valType": "color" + }, + "editType": "calc", + "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" + ] + }, + "x": { + "description": "Sets the x coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "x0": { + "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "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" + }, + "xcalendar": { + "description": "Sets the calendar system to use with `x` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ] + }, + "xhoverformat": { + "description": "Sets the hover text formatting rulefor `x` 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*By default the values are formatted using `xaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "xperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the x axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any" + }, + "xperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the x0 axis. When `x0period` is round number of weeks, the `x0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any" + }, + "xperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the x axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ] + }, + "xsrc": { + "description": "Sets the source reference on Chart Studio Cloud for `x`.", + "editType": "none", + "valType": "string" + }, + "y": { + "description": "Sets the y coordinates.", + "editType": "calc+clearAxisTypes", + "valType": "data_array" + }, + "y0": { + "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.", + "dflt": 0, + "editType": "calc+clearAxisTypes", + "valType": "any" + }, + "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" + }, + "ycalendar": { + "description": "Sets the calendar system to use with `y` date data.", + "dflt": "gregorian", + "editType": "calc", + "valType": "enumerated", + "values": [ + "chinese", + "coptic", + "discworld", + "ethiopian", + "gregorian", + "hebrew", + "islamic", + "jalali", + "julian", + "mayan", + "nanakshahi", + "nepali", + "persian", + "taiwan", + "thai", + "ummalqura" + ] + }, + "yhoverformat": { + "description": "Sets the hover text formatting rulefor `y` 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*By default the values are formatted using `yaxis.hoverformat`.", + "dflt": "", + "editType": "calc", + "valType": "string" + }, + "yperiod": { + "description": "Only relevant when the axis `type` is *date*. Sets the period positioning in milliseconds or *M* on the y axis. Special values in the form of *M* could be used to declare the number of months. In this case `n` must be a positive integer.", + "dflt": 0, + "editType": "calc", + "valType": "any" + }, + "yperiod0": { + "description": "Only relevant when the axis `type` is *date*. Sets the base for period positioning in milliseconds or date string on the y0 axis. When `y0period` is round number of weeks, the `y0period0` by default would be on a Sunday i.e. 2000-01-02, otherwise it would be at 2000-01-01.", + "editType": "calc", + "valType": "any" + }, + "yperiodalignment": { + "description": "Only relevant when the axis `type` is *date*. Sets the alignment of data points on the y axis.", + "dflt": "middle", + "editType": "calc", + "valType": "enumerated", + "values": [ + "start", + "middle", + "end" + ] + }, + "ysrc": { + "description": "Sets the source reference on Chart Studio Cloud for `y`.", + "editType": "none", + "valType": "string" + } + }, + "categories": [ + "gl", + "regl", + "cartesian", + "symbols", + "errorBarsOK", + "showLegend", + "scatter-like" + ], + "meta": { + "description": "The data visualized as scatter point or lines is set in `x` and `y` using the WebGL plotting engine. Bubble charts are achieved by setting `marker.size` and/or `marker.color` to a numerical arrays.", + "hrName": "scatter_gl" + }, + "type": "scattergl" + }, + "scattermap": { + "animatable": false, + "attributes": { + "below": { + "description": "Determines if this scattermap trace's layers are to be inserted before the layer with the specified ID. By default, scattermap layers are inserted above all the base layers. To place the scattermap 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": "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" @@ -76607,34 +75332,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" @@ -76642,21 +75351,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.", @@ -76689,90 +75389,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", @@ -76782,51 +75432,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", @@ -76835,17 +75441,12 @@ "bold" ], "max": 1000, - "min": 1, - "valType": "integer" - }, - "weightsrc": { - "description": "Sets the source reference on Chart Studio Cloud for `weight`.", - "editType": "none", - "valType": "string" + "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", @@ -76862,11 +75463,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", @@ -76874,15 +75470,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": { @@ -76890,34 +75486,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", @@ -76929,17 +75498,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" @@ -76947,21 +75516,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).", @@ -76976,20 +75536,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, @@ -77018,23 +75585,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": { @@ -77265,6 +75828,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 ``.", @@ -77429,31 +76001,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" } @@ -77463,9 +76066,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", @@ -77488,7 +76101,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 }, @@ -77504,7 +76117,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 }, @@ -77513,7 +76126,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": { @@ -77527,35 +76140,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", @@ -77570,20 +76183,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", @@ -77593,21 +76206,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", @@ -77617,13 +76230,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" }, @@ -77631,13 +76244,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", @@ -77649,13 +76262,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", @@ -77667,7 +76280,7 @@ "showticksuffix": { "description": "Same as `showtickprefix` but for tick suffixes.", "dflt": "all", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "all", @@ -77679,14 +76292,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", @@ -77695,7 +76308,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" }, @@ -77704,25 +76317,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" @@ -77730,7 +76343,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" ], @@ -77745,18 +76358,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", @@ -77766,7 +76379,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", @@ -77778,7 +76391,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -77792,7 +76405,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -77805,7 +76418,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": { @@ -77813,41 +76426,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" } } @@ -77856,7 +76469,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", @@ -77867,7 +76480,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", @@ -77885,20 +76498,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": [ @@ -77910,13 +76523,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", @@ -77927,12 +76540,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": { @@ -77942,7 +76555,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": { @@ -77953,22 +76566,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" @@ -77976,7 +76589,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" ], @@ -77991,18 +76604,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", @@ -78012,7 +76625,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", @@ -78024,7 +76637,7 @@ "variant": { "description": "Sets the variant of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "valType": "enumerated", "values": [ "normal", @@ -78038,7 +76651,7 @@ "weight": { "description": "Sets the weight (or boldness) of the font.", "dflt": "normal", - "editType": "calc", + "editType": "colorbars", "extras": [ "normal", "bold" @@ -78051,7 +76664,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", @@ -78061,18 +76674,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", @@ -78083,14 +76696,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", @@ -78099,12 +76712,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", @@ -78115,14 +76728,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", @@ -78145,6 +76758,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.", @@ -78163,7 +76809,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 }, @@ -78179,7 +76825,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 }, @@ -78188,7 +76834,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": { @@ -78216,14 +76862,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" }, @@ -78233,10 +76879,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" @@ -78249,7 +76902,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", @@ -78295,11 +76948,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, @@ -78790,844 +77456,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": { @@ -79641,67 +79699,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" @@ -79710,7 +79768,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" }, @@ -79748,16 +79806,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": { @@ -79780,39 +79845,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", @@ -79840,24 +79873,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.", @@ -79866,11 +79881,7 @@ "valType": "enumerated", "values": [ "normal", - "small-caps", - "all-small-caps", - "all-petite-caps", - "petite-caps", - "unicase" + "small-caps" ] }, "variantsrc": { @@ -79883,13 +79894,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`.", @@ -79898,6 +79907,7 @@ } }, "textposition": { + "arrayOk": true, "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates.", "dflt": "middle center", "editType": "calc", @@ -79914,20 +79924,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" @@ -79939,16 +79992,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" @@ -79965,17 +80025,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, @@ -79986,58 +80035,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 1e648e49d78fbf73560e75e4571de8b916776c46 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 12:14:48 -0800 Subject: [PATCH 06/18] 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 363e73dfaa00b071b83c6620f8b9cf70a2ba1dde Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 12:29:40 -0800 Subject: [PATCH 07/18] 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 260b1771d907b10895b4071f2c5f151107c243ad Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 12:37:42 -0800 Subject: [PATCH 08/18] 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 4a497b64c26f829bfb84182292c9ba7d9c6dd10c Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 13:06:44 -0800 Subject: [PATCH 09/18] 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 e07d950525ccd6f33cfb4b49f66d5ee09355af1c Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 11 Nov 2025 13:19:56 -0800 Subject: [PATCH 10/18] Run npm run schema --- test/plot-schema.json | 717 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 694 insertions(+), 23 deletions(-) diff --git a/test/plot-schema.json b/test/plot-schema.json index 9de100c44a2..4843c582e56 100644 --- a/test/plot-schema.json +++ b/test/plot-schema.json @@ -57557,14 +57557,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", @@ -57572,18 +57564,691 @@ "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, + "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", - "min": 0.3, - "valType": "number" + "impliedEdits": { + "autocolorscale": false + }, + "valType": "colorscale" }, - "arrowwidth": { - "description": "Sets the width (in px) of the arrow line (alias of `line.width`).", - "editType": "style", - "min": 0.1, - "valType": "number" + "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", @@ -58061,11 +58726,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", @@ -58106,6 +58771,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 8076f93c2c7221b1406a652eb3858a311fd110f5 Mon Sep 17 00:00:00 2001 From: John Degner Date: Mon, 17 Nov 2025 08:58:02 -0800 Subject: [PATCH 11/18] Add quiver jasmine and image tests --- src/traces/quiver/defaults.js | 3 + src/traces/quiver/event_data.js | 8 +- src/traces/quiver/format_labels.js | 26 ++ 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 ++++++++++++++++++ 15 files changed, 858 insertions(+), 62 deletions(-) create mode 100644 src/traces/quiver/format_labels.js 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 e03df991d97..a7f9f19193f 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 if(!x || !Array.isArray(x) || x.length === 0 || diff --git a/src/traces/quiver/event_data.js b/src/traces/quiver/event_data.js index c744a23a152..cb130d1b48e 100644 --- a/src/traces/quiver/event_data.js +++ b/src/traces/quiver/event_data.js @@ -3,10 +3,10 @@ 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/format_labels.js b/src/traces/quiver/format_labels.js new file mode 100644 index 00000000000..c03d91421ba --- /dev/null +++ b/src/traces/quiver/format_labels.js @@ -0,0 +1,26 @@ +'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..39aa07d337b 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,66 +12,55 @@ 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 82850f0840b..b52980e796d 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 ae5d0f1c48ed9f4a69a0e2de8da8d78c7fb50dee Mon Sep 17 00:00:00 2001 From: John Degner Date: Mon, 17 Nov 2025 10:50:04 -0800 Subject: [PATCH 12/18] Generate baseline images for quiver tests --- test/image/baselines/quiver_anchor.png | Bin 0 -> 27191 bytes test/image/baselines/quiver_arrow-styling.png | Bin 0 -> 21011 bytes test/image/baselines/quiver_categorical.png | Bin 0 -> 18372 bytes test/image/baselines/quiver_colorscale.png | Bin 0 -> 17077 bytes .../baselines/quiver_custom-colorscale.png | Bin 0 -> 21670 bytes test/image/baselines/quiver_simple.png | Bin 0 -> 13170 bytes test/image/baselines/quiver_sizemode.png | Bin 0 -> 25138 bytes test/image/baselines/quiver_wind.png | Bin 0 -> 32081 bytes test/image/baselines/quiver_zero-vectors.png | Bin 0 -> 15459 bytes 9 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..f01dfb83745b4ed2b64907284603238d855eb946 GIT binary patch literal 27191 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 OpNWClkwSg9OaBMuhk&~P 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..24eb6294fce347d87150e6a18e41658006af909e GIT binary patch literal 21011 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 literal 0 HcmV?d00001 diff --git a/test/image/baselines/quiver_colorscale.png b/test/image/baselines/quiver_colorscale.png new file mode 100644 index 0000000000000000000000000000000000000000..7bbf727a409b0ecb414cb8f87799a2f1e955b6e8 GIT binary patch literal 17077 zcmZu(by$>9vu9U85D}Da1OaJ9LP{1F)0C4nYx>lI|Ai6bb2j z7IyKw_q+f2JiL3}b7tmD{buI%gQC0?{w2yw7#JA%GSUx}F)*N-7#NT(9BlApT2ZAB z1A`Dl=7G5CYskttE`qqfdgphgGlGKr)$mnGzbUxV2c_FD#hE6th&8yX5Lq~se7Ynb z3^n^6eE2E(0=N3jB}yzN4(x|plD6Z7y53dnB`sG<@b9$mZ|f+ows#$~-)+kev2{Vo`=`!+}#|kcCQHg11#8u?);Jr*JW?mLe+v$(U2lRXpsJgjz-uu%- zV6QNTa#%2NG!qt>**>7o)xSn>=#*WV#SSRA4x<3Hz(%leG|gB{E}YRtZy19CX)B|3 zOsNm^K)rMuthntIb-u^d7b>E-n$}DBOK(ssJ`&O!?xj$fVFK=^-eDNiBM>T3OpeSO ztQS%25Zy1E?`F-5{boeQAbhe$6NmV0gR+GI)KzT?zxjf_d`-IPBIV1j1O=u~!qd@Ar2Y5O$(g zdCRvvr*Z`c-2tR^+LMqxJQJfUwC`pKSX6?ia=vXCV41bInBgBkbl{2GirUCK6w6v9 z^oGXaiT=W8VgygC16!z0%R_-IXe3OEjQAnykpqr@a#2sp0)7#4uq1^W_V(d89;mYBy# zr9eI;)C1>?dkUht;e-tKMIdHl3X&MmkH`S=2Jnzq$QRD8^)3U@+IPYC(JXr;f-4l$ zy5)J!4gx_~G=z)(9pZ&GMpi^^P2YTO8quUcu-b8}rw?8$BOWmZ`2kufI3v#P3tZYY zpl(cvFMy6SWy65Z;Sd(JFIs5(pxB`RdTxv}@}UE*YdEhZ!0q_Er9_+&U!{hCKLp!6 zgc)5!36@@w3P{>&OOp(!(Tn>Cpf8P%KyZ@|toZj&RRzPt5?E=;_yx;JTu3X*3e~_8 z4Tp>2;%7@BVmK=Vnr_c=t^NN!lsG!`vv3qV}lnlV3`+Mqlj6|LJ5K=qNfe*o=koCTyrIuiDu`4tSv zI&c_ugQk7t5VRAa_XqaE`%{@0wM!JRC!W&D_~(4UW>0B>5rcDx$(hj#NrpA1WD1QC z-uKW(tw00<%I+;ajzL=gnHN!X1~0ARvqI3;p2ZAn%=!8W4}C5Mq!)0Uu?{JtLoJ~u zdtuyYTNh63jS>OQGeraV+vNZ|O+e$wMOQMKmuOraB~mD^hqx6)uU=76G78V`IX7_-Mm~(a!*;{X$E{k=g>@+^7Zj z>_$+E^sT2H1ciYItX!mLTQqV)`8b(WUSf*WdlkL4Jg87mJx95>)vJ*DYBJ@aZ<=Xm!bSY%=4PcqBjB5Xsc0jGwRr6o zmmwAuQa$ZS^(#G6KV-2tQ}$?od-elMg7=b+mKN(LL&c28(aKieJ39PpuG~Q%X$hHu zs_(9i&wj?^4r7*!k&flJ%41ZSbot{S78xluPGoCqo2HT}-|q>dCvvo*rciKJzd?Ix+pZ&O~lwW8)o;1hj9nf^uaAc0(-I z#;P}`z35uy1jdQW*;i6^;h3^yF}!9WkE3phOHrU`!|?Eie#OqKoOIJ+R!HC&)OXH5 z+>C7S^G+qIeYMKQC>0QvEa9asRpg0J#q3MQJ$EzW=Z#x=+U1WtFH?jxhL~`d*v-p# z+f>Hn6V`6;H;1I8qzvIv+|%H87%I1jB)asG>+NoAVeKHF{~aE~`u(L`+d(}?EwWky z@>}%TKc4sJgqMqC;&Nisq6ngYgLnzC_z@?#*(E{H60V`o%97|(lBZMogYps{9%q7C zZ$``1r?>epU88P4_2kg2QQZ=l_ootQ?aNk4PfCJqZf@H1Uw{TZ<`eLl=rI7Er>3ZLs z8bFW~m&iZvdyytUkT0lf+rp&&8(!c4`8^&WgZ%cBciSDGG85pBOn$_fjSJ^WcwPBl z?}ID!$s#mONw@-ZF_qV1fa6C<`>D2WRAS^y(BB5m;)y)RS(*Z@{{{yLU{O9;SJB3Y z`51WS=&rW1t0>dr0jWak%}OGwRCKcQ0$4@cs_28GGcj(w!Ene!`y7;HlXie1jZi5= zf#ICRiT~xfkjAtI&Z$nN%X*Ivwg`kQaBf_SI63I#=lE(CWzk_Tn>ISv!Fi?xT+Blk z{!`x_13qO&Ngm-46z~ zId!U?bH|D;3l7&k3-t^%*cS9W)ZS0F(utkKyVO1X;7BFjp~qFEz_$B1#HYhl#(3I5 zPhTS^k`)k_kv1&P=TXvnsoJ5XjmLD`*6DR~Z2#QeEY|AxkBvU@bZw~yCrbRpg`w5U z`rqB&XL+n+viTa|V&x_%SDV^qS*0h>v)u1wO7?Ki0Iu@!!SlVDOjQ4X%r>lUZyAiNxS`wh$!vto@sj7djb#=0oLPq;WRu0O-hv!dNZmmz4t zJWO>ZbTN19{?lN*5d&t%z#6F^7G(R=kpub4RkxueI_{S=1ZkLto>XA!eB|=@n(B8w zDft7?lxucRSTADf>+D9WX$My5-Qdm);QMg_Dv#T)eUP`pF@D`^-ZA)&&e2FVSm)6d z%#N>dBq3Fx{ysq4A!zD4w>PGa*R%VHPdy})O^>f{gknIJS@72Voa!<{m}A*`TenfjHhtPWUpl}um+avi&dXBCd&R(L zi|wQ4s}KpahcA{Xm$#<0k{LAvY!Fa?lA8rLLrm30t;vw<^$`>`!m7#X@QGk9z?_-|Qiu z!xx=lt*b1C>5sqpWaHF*UHqgvq{$M{Xj&W57GiZ05(f)-eb8qZ=gA{n3Y~sYu78&^ zN((M#>5rK8(%+J%+S;0u8XeHiyy#pe+QV3$5o1l(rSi5{L)1*|&*7`1bmIbjd&~M? z5RX2rocFo%*F@e~6exe=wUdKJL?0!DtDijW$Q*dp`FLhg+~R@=Inyn>j^2_?%gBZ7 zPj=e7{5h+<{BqEX@7a$k=m)pbWkxHTuNAqBmakcmPtw{OB)+bfgqv@?UA3_@?^>o= z%-D}Sc`^0ol_+PHQ~|FppPdSRwyzYXIlv2jG3Ic2m;%AlBz-&nKyay`=tA|e-P8BE z36vs*dSdeUHN~NI>MZQK_=K!1x=#7aW10rg2rB1hFNc_hxk>fhyQ0r;Z%iQ?@hmd5 zGOZ#?{2NH`UUL&NFDx_wn^5(u{d% zeu;Q~_IpF+3BAJwae0D)FD+vhla|>V7EslCU*WHHC}!SWJt5;(;>G^lNL`11HQVF8`8LkVF$UpRE8eA~rMZ_ZtwtN+ z*^btoGd2X;q#|ithVB-M3ivygc5X{p#mvy)&uU4yTsTNHKhD(bw{|sVglaj6r3H1j@MbX)}v@eJgHKd3;2}Yt&z9&#y~}Q#0G_xkgOiAA&Iejc3$2WW*`5fW9_0v z<6#~Bn>0&w%<~mXZ#9UychVOUrFK55HvHnprTKU*+pbKNKmPhG3I1>*!-~RymjD4P z9;S+ZZzIWi^*k*rD{HX$TkQ8b2AY~TFL&erXctqxa$p&|W#xQX{`L;Zc(RX=&n+LL zzEm@A!MfvM+m~(P%Bq?xNore1gBI&nM+^bj9EJVDz1!nD^90HXf9!@;97~AT@|!*q z&$?zN%3jU}q2pRvtcX)d-R^|*X5$3{>0I^v&lY^vW18eCRApv8x>xj6Zk`nOx=#^5 zHNeG$_7oXO_&p&nf8O=T`tHiB#j&5#aVd9a=jUZ_k$++F2|Uu$i?)0Bi+VGT*Sbf1 z#Y}|mP>}Xm{G0S6-%jx+U^ zIY^O8o_8};|M?-D4syK`>v18AF6XB-Ww(e>c?`(#wel}Q*sq-Ukg(@5ZSCjg7Jk%T zF#1GOoc_h1x;)xy)P|J}dTr7iv(Ev_?XgW43 z(0BPvLWQ`BlSo~>Kqzuv8juGk$AzQ;M$nm}0l;7`-Tu5#lvu}Z0GOs?qeylR(>(Hk zq)R5SR8fEn^N{()i^feIJTroGazPPB-Sg8hHSz(>9GdqY5eWi{{u1XBx}J~#5=Ez! z*sL4>@OcJU5*=b9j1rU~vPkivz(fg!WMK4H!LAICINqM(TZA)KRx}9O45wmB=}sACLEkAQ80+xpd^35sy2ie=+Buq~YE)+pL$)*=algPu6#@ zbD~q)NL+H7qSn?{-2ocaZxoP6XN4I0S|rZnvlx&r)UW^LMd#){d;uWJkOWa@T3%u@ zvTwS9XwnS}U|$fkjsYGQF1D5r>c=YHVP|J&BEQ@k#;THoUtL{|o8NgKea#7oV2H)f zFCS7QQpV#$Lm81a#*Yd0c%We_c*=w+=1nX}Ck{D9k#?mur_hZN+4S^u9`nAN6k=|5 z?TKOrRj=5U1S3$j-^UQf3+g<2;~8>P%lqu2Z_=0LVt8ekA4esn4io{T2^?>c^R9Jv zR#xN9A8sj<=HWZ8tn#8`b*}YmFDE~`uE^frf6n&$%c-rn8-pC$Q20cEQC z9}4;Qao0=2^>;N3^+hLaZr`(`P9}yIwhTZ|9itP=g&Px2;Q0jvBiK z{sC|DMfSzcNrv5Xw_O`(BoAnwtP*&@U{DWOyDR6wenxv}mwQGTU;isl@1ejq zzbEaMz68|(S;`h>v$3)k_ibqz=y2aB=*^G|{q**t*VmnsSQOp`&i~oWSAQOdB~{j& zH-qZx>W=U>&ZR!&b|0rto#rx`jz{N!P5^J=e zUB=_YdwN3l3x=I@6c9`o2H0t-g9Qs5+yY%%Yz&|gepG7G5uz79i!MvR0C@67)^{b845N#irJ=oQrY7SM;!+^2^ zzpDJ?DHHlw3`hf#l#$Xhq!&TjSqZ?_t(5gdR2k<0JQa9!|N8s!XQJFF!Ehjhk_tmm z%+gO4f!~c3eUN%iO_+oO3RzX)$qbG3Hd;ikfUw+s` zO2}!rS6W_%H2+h3|Be7FE_}BFpBp%hNHUk&t`b1~Rft4`|c(WL09GPb6u5)yQTgIXF-mSgY->yxI zVXB^bND8u{;#z4>v5kj&bSTmi>wV^9SPU+h(GX|t#`2aOm(E@1zmJ~5V>I?NtopiOIOvF$}`D# zt2gHY zZ>6{tJNTCUu(_#0e;1FFQuQ< zJpLN*RAK*o>>J?hjtjjdz@Ta}(w(Ii^p=!srN+1h?Q68wM0ONZidw55TaleYaNXa1se!{~E};(i90Vw41sO?;dk0+n^Pt#;tUddy5(O;J-oW~vrR{X|gxE^~L=b0>Zd|eUrX4J;tYM7C} zHaWhitgOu?D!;@LKSCEWm#wVI`MZXXRk=s%}n%AyF+DN*^U-#K1Xox6+zjr)WS*u=Js**IGs3Oh=G6lWt0&L?VaN+ z4$zO^`@?t_K6@kYld&4U23#np_YL;?0t`r2kxXFw^} zX2<0^ywCh~r0{G>z~G~LL+jTRk|9L5To;oTF@BFUz_-n-H$LMTZ~kieO=|2$?9tOo z?X>8xkXJ47cP?qRQDO<)3s>}>$TXY7{ee7&qFT$$!@bypU)BBY;Xi#C1nXz3!7)GZ z1G7trQ*mx^1Mv8C;G?Uv(`F0HY))>0Pw9=)R9s6gu?MZK?7uWvXt|_F%X})xd#`%4 z8+zrI*S_*O3Dj+#HT2NFjOnDjrI{bNUCPbEa+P%4oo+=bua@&}2-r9QdQSiC=MopEWf3$d^?N9xIg)qYtx+jj5l)2CS>kDm<;U8m<*O`%Wt@=mat}*TxQvYILh8M zoT`y!H4uGZ zq?kiDptJx9G%u#vG#shJch@)rMR%ec-1NV#*Zq+P5djr~=t1wEJ*M4bF<#g);-N38 z8Wl(+Ul?*J;GFhRk)bXPi2zLueb9;hAAn-Aw*;5ZbAj97!R;4OXT^DdgR*j+!IQN` zJacpsa_=f=_NOtLfld($nIMoIbyI3qEOeB{0hsGEvEP3H7yA2+PqJ(<)}nLCFqV@x3QYq%>?oh>v`m~n()oN4DRar#oL z8-~UMvH7Tj5fHH8f>1OwlHW5a+yEWZM`J!r=f#G1fHd6O#f1M7URLmu3Owc&N=UG; zm?9)aJQ<%oQAU8_p^ZaMRrKi5BP422*3#0#yQhAZV#DZRpdT^=jljtFS5kIDttQ6(NVE8!YkmA$|Ee8rb-h zH{iTWzT6+ZYpmtv1IhymOaWw~U)pR(8%imbAD$+BT356|bR>@-jt(&D+?l!-AV&JoydO#rg+rLjntd>HV3^24h zQLh8KhdCb>SsO*2cT{6d8lHn#;BXX9Tis(8$}AUxOT@g8#Yap^dP&0mZAuEm@)o;f zw|}3cBXfDrOV97>`@R9kwr>@l(K&Rd{-&e_$gzfKy>fwHZI{X+=g80+7j&K_{VBCF zF>_y4AFGc6=$RAxc}B1HRd_I?RBKnVL_VV?XiA1Q`;vJDK0#IEvU0IC{Zgp1<>(0s z&(495Kdpyvziw#$+uqXINj6~Zk=ipP8n6=a+_T9QQCPTMQQ9KeZYu zYoV-EAkpT2A~MvrXw!3>^eHL0%PDV+_rM+nkW$^x{}j%y(OP2M_CP^Uz2QM1K%0`EE?$EJFiZ_R9UQq z0*3v%pSTORW8bZgRua%v`}A|^soSh}x*>}`ihnT53ILq4Zsl7jvxou~|EPXmiwM1|H-Hd6-#mEyojQ3BOG8rjd7W$=M_9mb9Uf2^68gR02Twv2TYz1_ImMjjtpsnh85tY zmE+9qGi!`u4Ehvtt%%3FBLijfjhBJXqd0oZj&vJm(c>COM451!pP;-V0+s@3e~_+u z<(!*F9PrZB@yCoPUqc@X)yLC}E;G_Oe+OC14I9$LJ>}0M2kOU&PQ1^TvPoR zOOdplg69_i=`R}+Wt{yrWd$)$bO1qipcZinl~o`n!Iio#D~*6!C@R`1A`3|Qe>Fil zP%et)7mW}Uhm^eXe!1%)! zvPMdrFIUNrk2w~P_GfJO#b`r_=Em5$^Y`!mpls&{g;L{33blFh>?ifw)}nTK?JkA| zB6rpvM)n6R{S`Ot-(R&oxnuMFPa#)n%%2r@I?YZIAZwVDak@*LReavxm-TsL^=cKw z>%l)adG;o^4TP0MjMJ3pRUQ%*@i29~`V4(9yxaO#A_1pi?e>($^h*F|^BXmC1=>~v z+k=lCABT!M?`kzWtaT}4?+6Z4&OlcM7{&chVxE^1y9oA8q^{N+cY9`^e zMeC1yCe?p``lh>|9P_-Gf(--jc^oam%#<{}RB`89%OG7r*cGXY&<`iV`T>W{ zS7pLKea7h{?lN>(ep{Mvxb05o&Vo<%t2Ib53qIRzWP6m}5SC1q$h_yYZC>!z0yE`O zn40?c27Wj8)W{AzubfB?SIc;)h%j-^+DY^KlC*Vcr=Mkz&B<>&LCvn#!8!q=I!oAg zDG@D~k!kG9{ln_{gwS$}!B#(tJI{7jhC#|b+bu=s4;pP2mxiX7YG-rP#ydy8OPth5 zQS#Yn+TCW<@0B*ibW`|5+mfQu3_j8t9<;l`@xFd2G6pq(~J2q`h%6&M2qD zUt#*k52g$?aA{Bi^_>!jFH80A?%e+OrSi6JhGVmf+BSFRq}}z`*OchjNmg|5BFUi* zGFm^BJN^i-USa1BHK-KRroH?=XLo;sE420`GH!7Cu33=E;B#)u#5lyo3+lG`d8<9A zd4-rBV_$O9@t`@AcFkg(i_N>r?!pCw$T z-Hod|S!6SdOJr$SbgXH|rz!4P&cjjv0Y9iNBM}y8{hn_3tIuh-Z97?!kA*mAiwXfx zTMAa;3g4ATHt)$kN+U>a?W`3a8I^4G5zmv#W@BT!As`@7r>d`?z*jJ6viO~EP?r%j z0@sda>Xl0hRo^5tE_@2zZT0T1{7GVzNO8}l>M{inW-Jc>&Vj|@&}5reVqtJnm`qzE zvzf+WFvsyhsO=w{f^VycQHMc2mWHEMo8Nb*jMjzu5>NgPwrsZ6kSMF_a&!!?2XoO` zMOfphw@x&CWWMuFK8&i6Dk8=xZgn8fYt&%5^R8zfFvr^~ATon$l8nrUp%W6Xi6Ehb z#Kb}c9=F5Sp5)j9T-2QIucxf@QZ&ci4pw+Z z{)#R>`t{q{I>dR6(o5s}L#q`dkU{d;{*u-;uNt~HJ?}Qyx=tXbGMB(3tzR|894%s* zHg?DJh;_xTv2*|WH;Go@iSOEX#0o_A=W2LGYL}Y$^G#I!KDO}Q+PW?w^}(d8!b&H5 z@`i@naV}9R7m<}-Xa*g8A^ETU3VAO~p>tO#HP&A6=SEapblKzsbM^z}txm?#%FZ_pMOubRcMcE;(<+1T(ww~9o$AG*Sp?&^nc#qP=aCt>D9H=X5`+He%YkR; zNmOJS;M4mj(!i~{%wkZ!pz7zPWqnOBq?a;y_lp*%aOp5QbX463W!6k8N`A|mfnvv1 z?J<0^3GT;E-3L#~&HLGYXrB#=p9V} z0yZB#$qPhdh(09F#F%C}W5bOw34a)PR^!3Md{p9tAOJ+(TTzVx-9c2445|T}ItUM- zE8Cb1AUZRY-0J=}eXI(Sm~2sn+Ox#rmI^&%KC_|myJ&xO=#>GahQebj{$Z>y;M``W zC+NTnqX&pl-BzE&A6?j{pRxnHb_z$$p@14}4y%r$h-du^DJnm~@OX!eQYyvtXY3SX zMfoB)VT~nBuhAeAlNvx(K}?z3=nMt}dJIIcmr7@bg}TZrfZu0Re!NIwJO9*R7~Gw4 z13?z5jo?OhtHAaD_BU`e7fCZ*K-z#3z5=q|->;`iisGma9)4g6 zk7NfLA~q6xe7O+8%20Nmxn`wfKyo7xd8ZIKNDopGfS>{#TCb2Sp_{b{z#^P#4zfhh zw}U|R0@-FhWJPDyet>wvB0Rg_Ur*@e%d}qa} zOHo&s+JVLdeci*zY2Wz-XZe8wJ@z{$?Lot(reI_tOp4BxcS&DSOUsP&4j6687Wy?e zC#mN}VFW?-!fq)yRw1@K-H%m}^`(5B$_RkmS`d&6&ssv5QpDLtXoLQv+xgu04h>4& zx|~7BtrTQMTQ#|$4d!Vq4BBM=>m%iD@PI8vZEZFX@Irpid_#^xr03;v^gMZt&NVSP zAd{GRbZ&o>M_B7}GXL1uWo3OAdZebLbX`qheRg(Mix6%V!KXZvEEmf^u&n_GdQH!} zqeu*fD2DP)GHW_+w}QZ)o%|C zk%vT6N2GF|i}IJixrS(EE<`0vLBG zVnAv=DCxKm6 zLI#!bQeU>Rq9XnNsQv5fs7nKC!Uj#i*Hjw`>RXtNG~fa=A))LARiA6fB4|JCuiCg% zaY?LyC^u^I+_3l$2-?oZ%^mr2=Bw83kDe|P{h(lPC|pP#|Ea6&ou5AU;<7Tc`|s}x z((!Yz%JsP7)Fwt1|7~H2E(T@A)(pAW5Uu9QwxxSzZb$H9?(pAM5~Y2&z`!>E^0U9c z(M4*Nnza1s6yt^)a2%8+?s(|il)sq1PgCxBl~Gc2lG86Ko zV>}BcPmXs}CV9$812$evy6$R`wP@69Evjkgkr>Ii%k|KCA`6~di@o12W$Yieuq6J? z4VEdJ%deaW(XWSVk?tRYN%JqdwFV7t7gq&BSrh`Q113#>#0n^I)hsYH2;52DSxm>T zp<9e}ev+Rwn67@bQv7YwdA(jUch5HAcr#BR>f=_A>})H0A+c*1vl zaj&iU?!Ea$?#eM+Uofk~Xg*%O_)0Y<>khEaiU;7T(v909cG{vk;X;b1IQvd_V_GK8 zcGEGp`=0N@qJ-!yc`gEZjR&4HiN{-+n!X2559AiJ?Nj7y|A3g}am-yl{E^hvO=KHP4j|M0EgFLSL_RGw@rU_0N+ieve#g6)Z zJQz(O+XsRkPZ4X|ikt?ehF04T6(9E({i_{LvV~NS)ZNM)#|tcu$l5!zwVwYvaUl}}ZgVBaI7TxqRG!TUVO zfqWknxHiO>Lo7ZYtT)(T$%-y%fv!V0fzvq4R+f5R$QBufb0SE#{}xB=cGOYgn@xVK z7Xbyilm@fGDC1vkABb3duC(y#ukU6a1c@%pYw#=|7-@;Bygb?-^mRL4IzV>(izXry zU3a4CVj}ISwiKEj)+hAr4Z7Z9jMq4Xf{LAhiQqn`nloKV;sr2|;P5y>rtwkAZl(3O zIj8GFvX^$}eiEJTj=d|5S(iYOTkUV~`9WpC>xbH3ZF;w~8AX>&D`myT>~$M-lRBC4 z;q_i_NrSl>++&vb_(Gy0*FSqFeC$%`g8z~X{P{rhi?GDxo$YqsD^aPM!Uc{Mhc#h0mz_3fyEJE>;XuGuZq;n&tR zG`%f=QX%@}%>5kNojjp}L5syF`}q>C1#oHAZ@VkQsiBNlzERux#W}B44+szp=IgM) zKh-5L`&1R(A<|Rw(VnHL`jD%4U9^t6tyTYrP3OJ_)Ltxmgv&KwQY}-BMr_9K&aXZd zg>c|GTZPx_o{oE2_2;Omkr`2YR6!}1wpE8-exqT5YrWH#%GurOPYb<1SVdm@`->NY>L>;?J|pgV{$3_1jO1?_^(GcL3sv4 z-4<3`o$sSx=S)=e7}(p?uJQ{W|DBo5h_xUVH+AY!^$nKo;LMc$bR6&Q@1j)yY3&l0us;`P_X9UFrGa8m-a_H^#;1$3qc#oY*0URnnTf3yh4m)m zLwyPBgQiCVNp9B-K@P1xn&>n~u{@UtQh_pqSn6^;IHOK{b|q#vLF%A^yWW`z)Rga++$Aj@dJxb%e%zIQu|WoI(d$&Gb4KzI`17> z{>&K7A$A7I>yF^_0@~^Qwc7POs=%dSPSM%S-Pa{#eKe|*RXfXp_x7c&tERCR$7?Ic z;LG_bZ3eE}{X3SE_m*wEk#*Xv$O=6Ln{faQ2fS)+sA$rS@F{tNgx9K?YUX1m93=^w z31~$$xA3mj_;_L+rMz=x)6VQj5FOpG$Qe1>>vXTM_B-%3IJ|F4A+W%Gb15maa_eS7 zz%l{W4E+^e%}I?NE6S}q(%cevZ?#=otKnW`eIB0ySqYY+EneG8tE}l--rJIF*(Y(0 zw*hLlVdgA${P(Gn*b((W@)GwKp~*0#W*-uDmF<0YhoXz3H3fIfk2!i3(+3HckLb45 zukTlkeh3c^l?q;C-VbgwH&w<$DU$e}36K?CiQf#~OY{4iXlFs57(tU0BuZsan ze@vtGn=%vU_oLGcBD#)Rj+vAqP0y-{=G&DO1nn z(K0ABG@gwO_a&&$XiXqp1x$In)ymj7Bv-O}S5SkVI7`w&pqu_8A(?xnOnNC;JJ^wGsU|Kb;dnFFv@j`^)q1TggwvgC(Y2Eejl`5GG<0qBGL-l_g# zw%9)e@Sn3)$R;EBm_x9XO!2${NeDp0dsgzZk;FzDXc>zR!0?tWrF!Uscs_uZm3p#G z=Wqs78FT^DQ@#qJ%Bu(%sBWuYrZy2gpDT(29ZH_UPP5x6Aoc$>b?3GPIgu#iY!=fS z6rp`QnmACW!stoBo^0lMZ~tLF9f0|4Y9l<+n6Cn}j=HGC`0J~4%ohbnj}mD=L!ChyS0hE&#!Iepn*w>1R`Mjf?e-WSe3Z#$jIJaE1Nku4#!DjqK6~#0n9zP0Y9xdbI(-mw(C*<~b&2x=1|Sd8 zmU#3i7sU^~FO-%*Q!DIgFG?JU|NUh!m@Q?e1S2XuZe$p!!8^=2pzVU3kDUHN{(qqP zY?mtV?cD5F{g)~7=a63ukY?#saJKRSOJR`}G1_S5pY2ah6J1J*V>wp+gU&YKz ztI|9j$Zsr%s$PbW0m16_QK+IjH;2GzHl@URE};jSF(6*RC0r3#zKoWmAt>`$;<6;1 zPX-X;fKBe>9G+p^#!hG%=O5?^9R|k9Ndk_MC-~1Nu#sAH0fT`|fIZrGN*g@Eka;No Kpy0mYoBsi;=$g#{ literal 0 HcmV?d00001 diff --git a/test/image/baselines/quiver_custom-colorscale.png b/test/image/baselines/quiver_custom-colorscale.png new file mode 100644 index 0000000000000000000000000000000000000000..72c2db79e04861a13a2466e35074296bd26477ea GIT binary patch literal 21670 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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..18424d2c9def4e6cbf5a7fddd9fd009ddb8d118c GIT binary patch literal 13170 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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..e032ff7c306c16c5129b1ff856fd50a0107112dd GIT binary patch literal 25138 zcmZsDcRbba`#%R+Wko_pMj1&)BlLJ~s&Iyco&*O6=ge(ISxp=qJQf@r+;E~( z;2T{Id?6eh3Y^=r(%K%lizvd6)KdqID`QMG7d|FJp&D0YQKh(DyQ#VGqIbxW%IO-4+ zx3g>p%aH0=^WChB8~ZL;Ec$$31_u|P0($(Xn?3vi_$uHuarhMo5sN<#_(LI%3ke_Z z6XlRUeu@Ih@&JO*LYH#+{_$^FJRp(haUm3vc>n$C*H6QR!B0yx8ZUhnIvx#t|LH6X z4zY2Zmf7)-!MFmKpg0lyUR1y5_&pjv1q;p(!CwRY{^Nf{Ag*-_LeZg3KqvioG4)4a zF^BmNl+N?i|D6ZgfKLP!kXQQ*76e_!=j8vr0(_Ror~d5sh*bR+zBn5cXCfw>h3&-3 zw@p|)a9(Y_LQ344q89A0(3KSZ;q83D(DX5lk~qhkfv$MJ^}ca0Jt^ z-~`d!r$7E7R_dDAeG3@CE}UFC4%pA{RsLGwujT&lD#xX8m7d{13c;g=tjcVESLqLJ z!S6ojpPGZec>d%}Me_bQ>~`6~uUXaa;|j|ji|^lY56>pb{u0Cg8P~iHhhsSh2lu5F z{Ke~wf2RZMfKVLu+1LlYKcOG>f?!?oStJ5aa3Fui1ggXX#i8Q)e0)gQF@X>|NGSY0 z%50m?pU{z^%j(9V#L$+rW}+v)C1O_ro3M#oBnr5Tn@;&hZOsUXpk{Kv7trL3tMqGm ze~;^UuSIJ97ueL}ac~tqZ(UJ1{uYQgAeETHpFKnXrtq&M!G0BUh0b0$a_Hyck7I~Pk*tsa;L|oUAlmEL|3a~;*_+q|{62-|w z_qPI@5I4MTej1!wlO(RoYwYFohk61@P7xPgI6lkeS{zYX7CWHaMd{g1oF}9+#5Z1t z!@jrhjOzEr{VfGUa6V(YyaX~V2awd4zs3ZAA}>R6G~+2+e=qCTm|zcob>z0km>^LWjTOjzq`A5&PC;+Ku0{JGJ z<%Aut3cGHabBYEynm;ZSU~kf&W#D7A_nMB1w9gf2*YW)g$f0DxY5tJSn)2((--Cjm z1ObI&=Wf{j`}-JL7D9b+ZV{zA3JoWZLK1rv@Z!M>f+2qw0qrNE@Hbb{d82_(u^f*h zdh7Sm2grggQ_(!|`Oj`ORpW>P-N^yhx_LO8ZSwDQM5!i;MO;+=+PdNB6SF~C9Km!I zS$8S_RbMJF!fox>8^0bE08;z4!6IF-WjlE2>px{*_tJk-{9OVrz7jZNE`k?BL@Wh$IFJ4ueG8cFuXq(}aJaC_ zQVSklQPI()_#=jZpQHti=A=L&3?mOt*e!o(7T85vcL9s8|4E^p6t5;9l;roaw}JY7 z716mZ{onj7JCH>nv&YQIJ3GQYyRJM}t|(XBNbuQ=X^R!%`+<(A4A_E%n@5NGoY2*A!GNjOcgW=* zUmQB(C5YeIPk)cuT<=l4Tx}#E0!&BxrM+7$tprVy$CoMG7F=;{(qg~gyKbR1Jp(LR zW&QTbBzm=#uY9dTYAmmI*Vg-BW56h=+-c15%ZoF`p^Rb%fnJ@qKsVKc*-64b<9OXF^=NPk@&%+`| zDkyXdC*q<dzi;nLBFa2KDLJI3{s0t(@V zP6}jl+4BWMtDs6sMmv*a&<9&%6|MWSqZs}6S76gIR>Kh-cNSB^ zBn2GcEV6q+Os+CJ(`~WnqSmX$>YV1h1|S-hF3sv3$Otr7F05y`{o(bMspJ(F0j$8*dyD9t8yY#FXA zYwityoApdE4g=0p`CU2p>UNRxOx!xUdVbJr*?aS6s%&kS4&O5F_h6^eYVRnwnt40 zrL;Rxa9;*&_vc%+;rILxf={_^?S3Nn9T(o2j&&NT(ldt8`g4w}KR5CC@w~s(POoQg ze`jqnn|vcfY^i$9z9(J9Ik!Uz9Ea&#cN#`n_2=Rp@u@V%Zz*4IN>jX-@Gi5HnxD*N zP|2^t+#G0QjW6m6ozMt&XY7|@*?<83djU?V&9*o5z5}wXREAul7d83j-Mbk~^ZRS} zpMWE2A|WABmJWtQ442v=!9NugT=H=HLF{!q-5|PRjPs>O>} z4xT0G*1w(l+@F?!y57X^V1w8q1Qtm_%d>Zng_>ljO=QfzL+YqHgi)-Y@wNEM*Rxa6 zA7I*7DS24NMR5rrVN!<`MlQ`9n4jhGmT9q{qcq%FyNOpvYrK))XiXNMJfH7_S26T& zuwRi7U2w14i_0>M%5$}jot2h;?WpOuRI@cg^A?=-Fi`v@3}Kg-gxC5t0wDzJYM|8q zC$z$vpy*FoD)N>+pyJbx?OiI8yVque@PdVD+@dWLW1k-G4%8tUlcUPW)+mWS_%qRE zUL17+f{rq)NhF%Rl1WBAKalUF@F0ETF0HmNk;x8Mmcs51(quOULU2f1|M)g z7QteL81;nh`oGg8d#+9AAtP0<&iazaaSn*1{PWR9f0dF;uZF_6tCsWu=0xUGlJp{u_Vg3Y;%H7Lj(%c9J<_Spfsn}~ zQI3q$Ou||L8!LqyL6X#)N}b(uxw&R4D=X9YM3djmEd_)cx^;_t`Pxk0OiHR_OH$7q zGCiEsDVJXjRmOCg}z3mmF>jpdO zspD>6IL1{lD!wKAqSjo7m{F9D45CNJt1w~7T)8Kd59o;ii z88Q32S&CI%bQ*366;she@hO?dxd20@k&m#*eXr~$E13kYGc-fO4CNa7*Ued%IE3*n zcjZ|g;=WA2b3JvIzE?|eeUi6pO(>56-;FKIv7|3V0)d~t^Cgg61a&&qd1I*cYj|@B zms3*OFpJg(-1V(QXQ<|pXVBJKCL+Y$NGj)D)+#qj_7sXDyY>enWB#>ZJEybOFeRE( z%R!U5DKgFIu2&7W(WxU6{Hr(`Qic-lqMB)M8YAQoW^&UDH9#P+Z!~&?xP%u>5ver9 znnHOQ=dBqJ3@i|YM)Ex&igT(WT5}qs2AJty*X;$txWxciWbH1`g5WJNB@+qu?ianx z-sANF7|ZqcII(vKE;OglhJx7c=*_o&B1#UYuPi@@jzcIUHf&cWzNMRl^ybUVdp6HU zq$xyZ$-6xbjX#&T!WJgp?TDC5PfpUxQ2pTGrJWpI8Prl&K!{(Y2}LW^Wu$yxFzTTn zfQm&x@E{hXv+_NGOkPcSHJb)vQ;}LDOOPujwIi-mMuy#?srA6y`%)9#!%4Q{FmdgY zgCQNt^?`#_R{PdHbQwjMOwzv=%~nUBWpfIjf>R%gRy2|?S#Mx)D!Ic~qn+Z|6c77Z z)Jh7Wqr6*S8gR#bq{6ws*s3F0S}nf|GW>@6Jb+$dkN{HXt)y_2*Fr9)(NsQ+$pNvS z+xS+FyWFJCSNK80>n8I;cL{pJDuqZg8bY%@Oti zXP^RS)J{Z8M2h2JxI(_#?OQ3g8Ag4!jC#UiFF6F>9-+ilq~agaDI*Ry`3)@qmRf@# zc*lXwRI`;Y>F_&PFmXm}8A(d*Ef!bwt28J9RHkmu{0lk-5f=z!A&S2hzU1~e9uhc@ z;Z+%&2w_{Q|3WN~2m;}c09zvbv=?LnKng28W6w0Xcn{j&f4-b$+G65skg)w=L2@OJ zUS7#nBg7!^+png{nZyU%Vu7D9R6~6(3GMFfc_6jFEF&UC$9H1Mzad}b#fSSVjYxl7 zJo}$bZ?2kp0KCB~B~@qrN=@pZ7dRFxpWSumfKQnkDI-N03BJRY9q|rWOhbAuRATe4 zVXtAliz}G&fV7bn+sRU_b0=oU`V;T$H3Lf;f72vY*m$np{m@G9PjQW>-QHv zP*^}!mB)Eb$2g)65B93|#Q|X2e9F9EFJyH0?reYV;vIjy@RsgEiDS?Qv~`7e*7g=a zMJjc;sd#=4rS?MtHI>r1^?iCK=sef`dA+)#tueo`b+rKbjrl&KMCTFb#>#}ZH#T~; z97d}>uM&0j5g)vt<1HUC^YrxG?C?9(iv1>0Vn5WK>;0X-@%<*U+VfHDO}Ff+>FMFQ zj0DFj7`mvqLlT*`0f0|OuHn$Tk1ZH~Y|I<*j9~CL{0qP#wjV0`mIr+J0kh*u z*4_k^;4}A!yxFGJsaA)D{@l%aJn{-@J-f(ugxdl)qSXvZ=}$dr3i++%ex&L*@hKGR z>OYD;vi}xLvpMppV<`Nh%sml!kqf2gW50ZKtWV)#Qxf!2-^$5U;THd(^@Dfl zpSZP!CQ~aTw4dK7PQCt`@4kl!<3X~wfNP)3r^eLVZ!DhtmEB*5Hte8@3n3%BDLx=n-qw+ zYNBMaqxFu*t=wzn8?6!T6{DTbwz(EV^VpW^v;NxhVGe(SO<<)I#!Grs1ySO8j@n)Z zeZV=Q%ZQ%e!Wi*6)$XKM9Ze3@9hUlRq1-X)PHh7fm^Jk+I6M#0;wo4bubjri@*$sx zRqvkj^963VE;-st7C9u>4dUmU7!%y4HwsKP115eo8;e6d!j2=EI#;NNtEzz+#*9)* zq}>szDYxlqaAgj5eD5??TjPcq8H)Ei^c(=Ec(<7r60QU(@+80?#6LDpMB)BV0ssmd zjQ5tS==Fy|s5%QYxbeRyx_* zU99epDxxKTT4Nek44rEF+6G>ASIniy3e7_TDcR%)fzB@UGe|zJSZGPRYHT1Kw&DX~ zk$VV|2qCqt_*solh}ER=2dh7uVT1PrZ8Xvd!2-_~VKXQ!-uO*izhd-hd{?LEdG{it z@pxb1Gj%O!=Nj~V5VFyv_K@Y%diV&Kh^h>8xeh*?ds~6M**fr4xjeCVtF$EO8t&vM zVDcGVJEhMNYYXww;o&L@P!ACvUu5+%oI8|I(*zvcCP|{ve}dc%$Q(IT)8vxopVTMz zzr#Rk!K1{i=^P}B!Zd+MmUPznmDl2f`}gm!+kHnTb;Ri&DT|LP_ue>>i0CJNS^>J|Z8{nLlUy zQh5zzo6<--LzT+!6GMVP_J=(=YHA?@j8STpK6IpuYWL*XS9bq8?&_6W_}7n zM13}qkp^7m03{HGYkvr5#0KC~B&j|GMpN6HNGFG(B8xJgJs9cp+N1kfik7RZt2qXx zwr_5af?dn|!>I8-vqNrEfe@LBy$YMbs%A~x6LU>y1hK5qcoI~mE|MWmN@ao8J!OVJ z)L)8#TbFxSM;B26es%IWmD{uu;#M zp(s6LoBZn4;5(izkzAV@QU}c;3l>e`7dN-+j*L(K#i!(w4=3Y&xi}t)rhT{i zWA9 zg)H6oyFJ2IrIZ1VD{eR~V`>JLTG#lLkX-mcLUQKgqa58_1K3IbM&yZ&r`7a(#+HE- z>u^ibQ5SzSt?d2dIjwRXGF2gS!Mx{wAfxWh)W&x}^QxaT#q;5F;zPJ7J88RiHx^J! zp0nJ6c@Kqbdz;8ae^R)YKG<2EI!7!?c4Hg|nDp4zzjd z^qEu0-9}#vhQ=|A*h>=XKYWVrTjGO+kF#F3w7r7+h;!h^(%6{S=AsR-jitbm-vzGD z;nNcWj8f@6>U$-&eM%{tD~-%Z5L{07_YtSdy*fAa`8lbIk@bcu~Ad(lc(E^gOlmu~j-=jaO#oVi12;5OgOg`hGE*nU@i z3v&pIaqwNCL@o~)@*X+)IJDkj%QYQsEwlS(WmyHg8+A&mfWGm7-IKT|BNC{(rfRhb zMA}J#M3|M+u*{y{Eo~n7KT-kLG?~`k=el}DuE8lID;`vH+&%4)k%ztz@(u^>>oJEt!nATrz zy~GjH85*n&l1h_^cFC=gN9o?;yX$jWCCY3WA69~KE)J)lZu^ifOZ>HYw2a#YpQ zgZ=H54_D}2qb5PtO2jR;Z_HZ-UX@!*3X&tK$s0w^&v;m}@~{80h}>5a9ku2y(=fX8 zSE)#z-y0hPP|xsZ>m4yZ-tA7|n@D&gMm|5^;XD;>rt^rtZrc6guOjBJUXyf&3bfRj zOh`K_Bz11pHM;tztB_uYlG+>U7SnGPLP6HV-0=x5K7>6H1{EVwf9_q8=@p@~9z}Yf;=BDL5FKL`Ul?@u z^6-N&2}^^^E_jH;(2n=~UqF7zSUcMrQ`u;iA4$#oJ(&^`ekJ=#5vZ|zqQW|L{ty!G z^^!#7<>7BiFfOE@bQrJ9^zZ?F7o-vjv4@hXh>?UPp#d5^6n2rhv%CcWE1Ac}~O z2wxi*+|FR~hlMr9>-DEt5J6f}L@9TQr*tA}n>IL@J;e|c zlmnIbPobbNflV%*2MI8v|I$lal75H#nhU1AnHv4IKHdXIn2A?>!V;{!qkO@d?k!J* zh{Kh$33~Gl&@y2@ygazi;G8e)gh@9%b|HZl;pp;-Ds>3qyrudMx>D zE)HS#ra8tfNaq~qmJdU#yw@{ zTfb~M#s5;#f*CaAlHaRsS+R)BMe)-3$F87HF1r3 zSV@Ye4V5ueOzHjWGZc#1AW{w=F!pXUD6zf|fHOa8a0sMUdxky(n;1oe%+k7Shb+t8 zGqWBlN-K3l4ZHSde~pR>g8JjXIKyB`Kfxsc5-4e_16)gqx4k#Bzcum(~&|F-tB`FcwR0*`tV38FhhAiR60U%$3SdtNOm4Cl+ z#Uf-u!D!vMKQZI`mAeJ?p_03^MY<2@AORGeXJdre4ekzWB%65;gv})0)^lMCL+K2_ z)o1q=Z=nfd#hpn1GHuF)Mq95u)dhNT=dcOAV_DwlIYev z$Q9)0^ovmx(X!DTy|pEqqP^ED$|b`kmc+Oh31gbdox(^f1^WGb6u0OO0M@*E zf{$Ak@De=qyU!oRUE!K5rXZFCc}^>Ovw^PKlCZ%Y-#AqZPk5e@y;z2%xtOt6F9DNI zY-x#C-K>?T-k76X=#7g>(`%rZfvgX}L$%F<9RAfuNDrjO%>|*T_Ga$DRYkGv?Xg7d z1C*kr7lo%;hj2N z5F==1aCCT}Vnx$;=GN2pbZb#Oh%}A*p2j=bD3hfR{S~J`28UaObGCCyV%8~yERp*0 zEHtsCW`16gle#GJ;De(LQ`Y;sN6oj8sd>6b=Pj#reedhUGEG6ky!23(I^;upj1h_m zFV;x_Jmx2iXr zuOenytI%agES^lyFq>O^ix6s3Hev)wE=@z^%Dsxt8h9PHSi~zJYa-{&1L`mJ_`RXM z7P8-JL74>&60v=m4Au&vNuT*{T6Zs<<;>JtP8!=$_t)qrbEDZR_(E2^+RtOhe1%8f zbY_4=98=i#mbt_TPVI5Qrc!Tzblz?E(Q`9*yNO$*jqKf86YYNOxK=v{VKibCvFzlAOYic8mCCacMVIY8>35Z-&(^|uc^8}mq0Mu><9DY zJ={xT6n#Nb(;3SBH98_h6BVi%VFUZ%g0)zb8g5nH`f{}eY^>F6{?K#+*UnTPW-ql~EBQZ7S6b2Wnv8ojgKQwi zLxmAx4yWM{$GccBc&rzC>5bj*BV$|66ngjpfC{Cvu3XI^_6oQU3xYJ0LzR?Y#Qe%^ zaS%W3)Q(W{ny$o4UvVFrre!WfjXieIp%26h3ndXh^$agecdi*fi(L+2GwKEs^fQ?D z#j<)QSsbeEFdQ6Ts>CZp9QD##mh*Nq@0bT06vqoKZ{JwH@!du2uz%jb3R4h7p-Pg&ZY@Il_ds3OHTG?2OVDP2j?-gCJ>>L*p< z{j7z|6jv^8eQ)sx(aXVXNy>Wc9={xfLaLwJ0wfL9NFR1aj?NFQeDl7#JSc$XN7lfy zbTr1DZ#%)qrmn(a+d*?}r?WUz!1{$+Dqug+Fls%@yUj8nxMj*dU4-Q)(T*o_`M6c@ z!FS4>7jcjR=#`p)M(H+Q5h{-h&YHUdx0G(vCNgrwmGm-phbpDrm*xPmA$Pz`sY)|B zD8L(nJ-GI&C84+Xjd(mTOi2C*k!TPq=!h;;z`dRM;C^T$-H>`V#;EXaA!`M$DOCB| zt>G?7;!#b&Jd2>$+x&&tILk{e2u0n|Zl?K6sGLw^$Bp9Tn??J^!&)gVkL>*@F(Feq zGTJY+1ofjnr6qvSa3kTU+xFhh47e+k4=3=M?mx>pGVu~?*-iFL#3^AT*S?il1V~z$ z^XUbEpyP;3_Cb@~_`Ia)u4|sdg_Qcqpoimy-PyCjjdFElCM)O7b;8Dj6@q^X78wp} z1P|IMa6LKG>Bw_e8xl_PxsVRT34jqqs4_*YV_He}{%{Mn9jxGo6gc23^R9t}rR#2e z1}ckog!}e3|A>15c6GoC)KyxgJ5tF(hkwI*m{4O#gz*~h2Zx;$CsIPD6#I@BebJAgHW@yG$`cWJoaFQi@eoMI0fFfuwttR!25qxF+&Wo`{)o2QsOLx8+Oq6ZEn;i}^r zx5pO;Kf<(|y^X5m~UP@HhWdC{f5pW8fbEP;8L@0rot{u`qDIRY zs-|Y`&#AGZ0iT!ChTInVhd}k+9;AEa=&}I$pv$9EVblKJo=?HbJ_YjHtxpZi*kC-z zbkr4_?XVOh4d&Nz=_Ml^?6+b!YY&fKVDg zI-Z;0X{p}l3-U~1)S-9_)0Vy=+**R;hY~cxvr+Y1n{Kg-~V_+6a}R>Hi3Yz`F}Qr0Hp{DZdpv!~gX3!n#J>O_Q%0u6L+;L?yWJtW*d|I>}Nx<@mr zhP96?ffO4+zNuzR7i7rCeb=4{Kj=u`D0?(_`RX81U!GH6=#6IEIOpemdva3nM~)&q zBc;W%5g#s_SR@>;TN-Rsw1WFaT|W7LM?RmKcLAz=w7 z%(WBJ;~JsyPPFiYPBeGGd>SK%|F>-8bAUwSf@bG;0_iS(f{RI=hiYNXt*yl%Wb#BoYR(?kcE49IbB)WO@h_uGnI|p@iJ7+y@y<#A9Gl+Q(KbIibW>gO?GQvuqo}> zmn-yC-ZlZZ5r6(Jp)&IUa?^O_{DIH7^Qap*p$8p8tyvNEWcq!4kdhR9+Xz@B&N;Z{ zQ*e`odo`(6-@kqPAcR3=bg5yG`$v7M^wSB#zT1jddEDQ;9T?1J?rU(FXEGh*J)Mx{ zvr3+R*|1Wu)H5V!QxtXOa`}(ZA|3dTyw|-qFc}SXroaJ~&aCtOoO<5~>*57EC1Svzc6!!%HFh zFtQI5nXu9na;xY09_z)q`ErCz5?AtP4yK=MUdZ$KdT|b^W3Awy|G3xSm>6YhgEi3C*gR zc3%*A!#8|RM9PI;sC3r|Q^ajC5+2`1{jVn($7zLbvMRSau565-y^I&Ypj3r zRRU8L^@Gk)fnd!9*i*lP-2AXo3B%85&hmgh(ekP(qb>iw8}aoir)!|R$&67NsFD!p`MlVxakH`3nW#-+bk(l93ymT)TaaJqatxXla z?b$QP)d@DsDtG;j2dd>GJcp)9^Vjhjb<6_rgx&(rz%4d%m1O#e=Yq%nXjvOQEt$CR zv!{;;m{0&uQoy_B?ejb$Z_$1o0>QRz988y9A8+Jj$8?d+kE6vNZ>EwV z+Iv$it*u)?7CufILS;+-HecTQ5fL&?ehE)t+#`Gc*~-?hAGPYclUR9`mA^XagB$PG>R8p-R;F8v9RHnSKbM}sgu$az zWQ7B2;;o}MHpKVrm%o%@+C+y;3fQB;B|fjrcrA-jB8!JNIdgi zCyT!LP2FXnIRkuX&IX{wcvNIJix&2*>-Ggx%)mXOd9=2u3xZd*Dw4;`g?2Mr0gZK+ zpOL>8e$mnU0x#@Q6s8| zhu;Mu^n*}Gg&#bD&kaQkGTXNT6xz=EoqNy2RFdM85QIN!t*}=B{;_sF}fiM!UjI&3RDJVd;-_t?VQ`&m|nHu(V; zaXMT#+jH4ITZUdp)2;fJ1pB$<_rR*n_gnkUvWnPlyRYt2MaseQikbmk(T_wfo9Da^ z3LGUV>T$cedy969{y_jvHq7CxGd-c7TF(T5+8JyKTHH6S@fxt(ede#iM5cP|;;6 zzm|kBq{hy4NlMO+BzK*FK3fz}w5eG@H0tx(n74Rm;#&z4`_0%Ajom;VuN8cq_bS(R zre>Pbu0VKmWbk2UV7^E7&PN)@u?uA4tc1!kZ3DodNjL5uwU<7xV>T5GBOzp*F}8fA zAZ|mzqpP3$G#;GKsn!nAr%sTX7HeSl`;H`m0QF?H9JSdnO!G? zqcdR=a39?n;9V|GFVwTO4tD|OK#tGeW`B*hd)4;Dt6adrj0V)AC`$_kGT_h~o#&Z_Bu%I?!GwmB=d zAI-4%U7v5bLo&`zivDrnRHMv*rj6EHl9yB&e>>Wl5tihg;eAg-(AfO9A0T zPx}uTHQBgff|G73U=ML~#WYXAwCj9*u!K&oaAuIG^#SQmj5in8)u<6-H0SQ#OW4n; zr4%LK-XZbZ5YgMiVNULXAZxeKne_C!AutSc1DA@`QY`+HL*o(Tw8y!9aa;Xou9QQWIj!MbB$1L-i zRvyHn4!QTdde84UZqUQKQVUBfDl_6%@|$6!R!f70e9Wp35%>7QBS^V@kP z_Q-HviSBM<+1ZM5HUwi$Wj`h zimj{?r>NB;V6tK@=}RdS3C8IHpwC4!v>LN#4QLi!27wn`UNVf8*u3@b`1q5&BL;PYid5;DP03qO`Cw4z}^isB;bR%1}Gu`wQe2uxHvVFan3)>3)z~}U%K_4aiE<9hISUYo*^ie zrE0g9VM1-E&_`}-O}JGtJY0RF-50UUD`vZl*3D=O(p@&%Zn2dP;1HCWvzEc~bLSc@ ztK1fJBku{cQY_V4gM99KNlJ2>GB+=}a zcnt0frf3g{@@K7ocbqSx$54-BKvz$+p4y|@7izdyr27bIAxc-MrZD7wU9<_t)ZJSv zRvhAhLG=ia9$iMl+S1C3El7Dz`(4tCA>2x8ufN0Hsy$r0!JY(?nTFW%vlyR)MBR7t z>yG!6p8A>hsaAcrg;gT6KR%47(aoAh!n7AMzwmB7o6ONKhv#fa$s^T1OE-3XIb|?P zmtpQB)?K6hX!?6$l1!ihILTlG`%9AW61HKDY)N-HW_$U^*sxQzG`sbsV`4~7nd_XU zh(W%w#8zIh+8jOW+{cHXi7|;kK$WDdNnEPV(O1TzL`#2kD^`}#$rH_QU&FR>)x7v#*2xdt?T2qT1)mXca~ zNs2+OgIcypU1^GTsoG}jd*Hl8jnTuU#dAFw$Pd@;lRtcdNziRO(C=dWZh#NH~W{K$Zl2g zT0J@ketLI2GbPl;%F%68SYX8O=->y(K4|mtAV^n^DKZh$^tSCvmaDEZmB8{B_yeeO zRdA>-=UjDX2BZ_`yf)ik*}wn(s7HXgZgYQ^Nvy!p`uiUzc@q?h&vEvC^$cPc_HxWN zauvJrUk^7^m@*TkDuT`uxq`)W$NU{EL1mMc1!riC9Y%Jda{?rl*Z~WLUAl+?5VMX) z1y9$37QF3Tc`lGr!w&sxRFKNTHk@eUw>q96F=f8=A1l9zv*LY5OA>7FH_HqcUz{C4 z@uU_Oo_{*hwpBpDdEGd zi@4;3EKHiLJby(4HbD(Gk$SD@EdJw5Q0L=C1W z{qf%sR)`8zKY*=u#M`G%9)uEt5TE9RsDMt$LGIz+ro2)m_jg1v?6wh* z*3xz5onJfpJtB~s5O!O{AIy*U3A(bVOpQCS=`7vJNZP+s1)K&{By$QWVVi%tk^YJm zDh|o{y?z{s4VIX5R;c;EtwL`@zJu1|L@*bAZUYzJZ$0=W9IB>Ha9sa%lt5WtLI819 z*lE;$VIV&Y-tLYbw!jiRpFDX|(QlQObC%@`4fSB*gTP$lnqd-B(#hd3fI$aXn^Jjh z`oy3LJ?njGbhR7Ha|f4X8Cx->IQW6-gTFKK-I?kK71D*_QaE5pmG$n@UAK+IHfMm6 zyCbd1H3&EvOFW|Rmp=J>GC{Rg|M74{~T&S816|)BgACBll&=MnH#OnzN zZ6mu_u9C#=YzjwSt1|u*_QbcQfTQPgPcEJD+qbVuK|}>tA#@KS_qr zZlt0R@H-7=+T$ERKTI0zVwX-tnFG=QuS*2J)er8+Z-NWG}s{;jtc|QOI4x5>w$Em*YK>W6(w_ zHW}XGg`mD1o3*a3dnQIn3N@FVL*E^j*NxoEQa$8BXVxE}!=2Ml`J@Y(b02_0bdjy1 zJ3@(Xhxes~*X?={+?TuW@(s(|l^Cc!K&olW#5wXf7vSCz*k9^%#LB!1I+_+^wN{aU zT#fCpx3L240G8|j)67qrgllv~nQ`fVp4xIxT) zvNwHwB1V&4pDNR@&t|_wSRO0~O7*5zZDm_^#A9A;@YU^iw@p5Z+P#_1m^ON2RTRcN z&tBIV+O6mJ#_P&l9OyalQgk`HI)Zr;e{l?-WkuH*W%imwdtbE2TjkZa_Ur=7DTp3us25JUy%- z`@|jV^0C!jyS&N(&t$0f987@`B24$ig9cTxrN@ugHAE z`a2x>gF=P`*haCc+2mIvGztbYSI%0|RNX$ZhU0D?d z(Yh{sCAY&Ls!q@w${O|q+j@ts3G*fczNN-BP!y9qi|u!3^02s8kESTa(Xe zjjtKGX*0Y=x1S%1-U4)-*O&3vea;>nB*UM+dEND^m%-nE3?I~rWx3T+S!6e76Pwrp z)l?l9*R9GH7^tqOuvJ*nSsYvMsoX{vP|*RTF>QoO*_De4MEFK51-OcxJn^f4JN;O~ zi33ibVu|6rYIEXE4*q~W1YQo2r8Z1tuH^4}j4i-xFM#(ViZ}oD#S<=Q7Wfd52)L*C z2WO!>e;zX>QdbHCn9n1XwF$6P|F~*t@WKk>TfB|Y|FmHXV4=n@-xXj=qHg=!4L<>p zfNEV0XXj_P1*g;3F<-;5;v0t&%_4 ziOVtz@*L7f`0Bo3mjA{CO(tyMTc#|cqJU$tv#sT?c~SkIKTc`|;R(bC%;POA)R<_% ze6TqI7yd5x&zJz!{Lf;4jR_X^4M_Ii#rjL(iyM$YD8h745B=%$_|^M@&*Gb-(?b2v zYY-Fwsu0(tG{*y|VmSjR?e{MLG{sePCQtu^K>Uc*N$|zNiwP#Wf-f4Ll$Qnz5$;Ro zg%E)gATAu60MgfYFsBc&r({VuejMrywmZS3{QJpqa$F^>h&;3b2uh)mDf=@Sevy{{ zy?3D5TeFNDP_vH_Cy;Rv829#9bG?5sC(8-Zg3WUh{MHdB8jx7D{ua*rpJi=dORCv3Mzi`uV<2L%#R9ChR-i`K57*m9jbD#PwMKGsqm!GyyY6fI-CZqe{H^kc*4UB4`QV zD$g##@Z?u(V!U$v{V(Hdehk`Kn?asn%83C6@?xkMrU1+p`MxMGV#H%I1U4Q(h;T?( zjkBe__fR@$LEtPFu(1zbal%S^6KZ+eM4vAuF68w6?XC zg6=US5LoNtt>h_eKN2>XcDs#KOoqjfz}Opo-3~OJl!9giz{$4+4B}$YM`T!Htq~+g zFKGGNa4CS0=^+vj_FF;otLeTBXweFav>7b8pMEjk!CGO3vycqT{1gipQCnSrN0f{Z z{TVJZ;$efzcCGZT_s7L7Vl)&Or~0P|fbE!7w*L)P*gzdL#5>Fm)+tYlv*k&zYGjIMdB4Z_tP-&%5KRZROJ=F>5Jz=2y>MRt~*D6v#U0 z=mQvIl(uznxoVML;_Jn37^_{j*km-XA?w?3qkYk?eUppD9WdM`s{|j*y2Fip6_IXR zxwJTpbOS&tj_KW6pz-hoHc?BM(>`620&!2%X^5d;kLeE2TJMR=1AULEIqn+ml8c*j zjJUwXdL?6qj{_34_<8(>5lDL+Q6{}IpLM|+ISJ4&FoioTpV>Q1ygbdJBuvtR80i)+#7fU$nAzd$CW1Ez&UTiV=>Y`7|@Pnd)(M)1Gjs% zX7cuu%E*@stZ=`zHW5dmZkkpV*_zquHATaoMbO{1kUOhU9kXqpHvcFpsOan4OH&)h zVlE*p0kp#!yYmGl!g8P)l99br=^&2ld zdOi8lQQ?C#rgCOj>Trd8Yma$eUI0rZ)w;Q*b35>26U0{P4SdyW!1e1>81ap=G| z4ZFrNHk86f3iCnJ!C@n|`C+Nn-kWGZj`)i-pt5~{F^57_}1TDXFYG_#5SpjIq;WohSjAzL@ zu7%~umXCVDv3VhELnT0jMS$aq$Sf&DX9DDj(MUm%B*Qs&8N<)2-bk|ck*6Ta_OEqX zuc4w_uewP|`VSyeB$%F>8j>btq>lN?7?4VY?{Ik@)|aDSoXo>K6=m|N3edD}c~^-? zmrH`T>44CExa;uJcOZ;KDk8x7GU}84ox5nEH2w7oD$v3KK*nvkH!8;-wmuf}lO*6P z@OxBiW)8>SVx3IpGvM_&md!*g{&{Is3#i9)Ap_HZzh;E|1i0asqbid1$6>$29c=#_ z=!~o2{(8><`y~KB-qYHhz(nI`0|4o|54iRr>aAiiMWt~l`%Us5On z*9+AZdoItS4_PEUP9Z2NgWvP>_5WU0Jp<$?wv(?(6Fht+_eRm*m-K|w;cDi71mc<6 z7btQAZ9^dS?nrlA>}(J=2@SwIKKns(ux_Y>UXh-d0cW6<5`$QW*n$tL|C7-qzrtK-Zv=jjQd2q93`T~`| zxds~BLv*qn)w>18D%ID15^MpgQ(2&5^iIcq^2#vQ+GF|b3!^nvMvqs%^=GItw{~=N zBvY9y=-Ma@X{gb(aiBAkU4k3{Q|LPnvOk^C!Z5_b#FvNC-`wPWu|(r!V^}!|-G?fi zC+$I3TQuNLfNGIq87;hbpHIK&>rL3AHFyt!N7ll&jWpPuLuaCNy1(7mmz0~J%@g6Z zsYO?#es1^;t?flOPhdvdg}pjTQmoG$h4h5(>tz`8P~yHEuuXlv|NX=DRxEG;?2NLJ zk$VdxmBnpwVgtQ$S+CoQU>cx#ei2()sbUQ;eXhtdiOB9Nb1>Zcnh$)C0e~(JfNsyR z6i`WXE|F2^{Z$^}RA90{SS!pqw`+5kq$oENUN*vZIoSQ@djDTpR~`@L`o70RiITOF zh>%Drii3nAWG5!es7{M5a+o0_400;6gpwRfW$YALj-5)8HHNW7Drpvjim`?7{gQK> z-|wG3J~Qv~JkPxE{oL1e-`Ca7U7igR?$^OcVr<~50szQjkfEFjS-<(Gb&+S&bEJ6& zq}QVUlkdLdH*wvDwl4l3Z%2wPyCMsFrEGjNM5PTo=Aj$Zw(H_3c4}J!EU%-#%(P$F%^JQg0yl}CvD#t_> zOFmV+`;;BtB7XKJG97~Sz>h~E7RY9ombMJdUncHi$F(&fYE)|bqwY*|Nln2hEby^ECJzT~7=m-*EwE(RqfKo>Hy#NNeSC}H*ofKi5fF0??6CB=_! zZ5PUyIPqss%lC5WRW6{&x%0}*#K&%k$)g9N^}I~gzdO}S$=X3LoA&+ZB7NqnS~k@W zyyLzIJ>ck-K{W=S3cFZ1M)Kze&O!j7e%CGt)CGBhVG`4G>CE>w9PNc^>|dX9**eseCr={~+9T zoj{a3ns4N9q64+|F?o)p*O6V3kc>(X`SFSsqv5ImnD>(Pf}0-*zwT;BIe2qlGYCU5 zGefvNV}ogRNdWCFWrbbzXtMSjvnKqDrqyqcKjA;NvpG8&-q_F{#pmXTP7H+G%FZ29 zh~k^3IvP-|w@jd8*l||k%LIBto#}~e%XFjOrQbk)1_nCVf8_$xH zg$|s!?6$4*Q`uUcKXg$s_H9L@#sgjmMlDLy-OV{;Mf4t~JS5rE1mO*_Of2G^hypq} zkRB70rcIRk7fi^>0FY4CELo0m`cbH?WdJz?;ro@0kintV1B1w%&oJyUh-;a>DQk^4 z6F>%};1DEGaceC~1-6JEL5~VSNY&4W#qreW z6_HhE|a>y`-wC?z-HQNnQ3;g@^1=m0MFHnoN zhr10E3RRFvsG>(XR;HZ-7nmvfU3TlQ#W`(6%!31p0qkW>T>?G==Jo3zUTL$FDE{KD zD;9LC-#`F>@j|~QuYNg7{U5W%|Be@iy1bVL{r~a4lBu<2g9YBGuRBkAfanowetuE7 zC)WyMpYuKgcnpbE_nI@!_S`&+i9kF*Mqa7KeKN?JT_Gzo>0RvoWp^nJj7D5q49z#~ zY<4XeBwT8WS5UzF9_5CBd%4f_D5H=EoxtBy>>7{I>Rh*nM8dY(I)&h9Jt#etBJrxN{gG>rQ?=to&OXBXbK zf-wV9&0heInGyhg+n62@;Sqm^zd;cjPzJ1EL-*6OOBl1+^UFOn$HaDZ zVO)XmV*84yRf!h183(c6A^(yZuuKvG4h{>y6_hBB&d+~Xav+zG1Khzht8+S0vCQ+! zsp;7ib)Wn_1F0n{;BTdpAMZ2h`zG&%di45rz@m7DnJR{AePI{Wr;0lQ7tiYdu-LsI zfr(DleAV{@^3Ty$_3_X9%Du1{wo`jF0`=((Cem~Q&~vG*_d z9mEJ!iO%>p2z&^fdAVy8IQ9ahJU})46rnQs3`)P{3vyLRAp;ssu`iMzglZ8ul->F+ zYX1DVg$Z&W?+uz@mXfL7P6;x_nOtsua30Ka5X+ap+w#ZGhwWsi1!M*;{zyqzezGnz zWpOe?8AQXSWqmOw?1<)TvaDt}#?a`q+N}=7Qj6wro?1|=SX~)|=fK(UzWg6QiUK1L ztBC-(M8zY>;1CnC&Va6bt7OE2fYenJ7?{^eBxZ0}=bkw~m;cTY6NH1U-rlbB>#U6C z?ClEEQ!*VT?gK7rvgxznSM-O>o88k+vb-2Of2au`uNZa+ZTuRIg@&c8?C zVG1WGVOuOcI>4K3+a@ZP&am8D#LWrqFM4ocM5X4?=D?qycMTjBl`0dJnt5F5BJc&n zG&oW0(q)8^=o-V3bTH0@8$Z05#gvD^+lnpSUJ{A%9Fw#DU`%F|atYhmZjguAB!KGo zf||KERGKQrdHuKTcc|>~Z$pavx|r#&AP*jK)>QjODwNA~2Fs?C!VnS>Th8@28sBc* z={H)CzK$Q8(B6q(WR=z=9I&DQhk{$@8W2!j4E|hac5~^|yYm<$NW}^tUk;NR5FqY$ z^fD}Wc@!ezmZnrofBRT_gT`ENdj!4wHpcPtlC~K1YcY^*#6G62t@niW1C znhVD6>-AA(GyeLNAAF_1q=n4Fg-(F$nKFL9%jzUnl{_8Qe+vY_djV`&+zGk;mTT_} z;z34}r$V3wFN7%}iZEtDyL<7;mdwMV!Z=yGz@ez$K5=#m?@eNMu^C_V9rYVF)WTZg zCbkN@*DQGZD9=K|>6Pd)+ka@{(;>DbY?5YR^?+y7{&X!Y<_J09Q{!bIQ*sa^4G?8{ zH6Kd%%fWG&VMMsOxs9i9I*~w5$7tDncSxtMEYbW$IQlmK<#<&?H)E{DZa1@WHLu)~ z9$>E&OCxN-MK+nQy-_hq$C4t4&DsgRjEvpFN!lDD4+EAKrV$OJ*R%xvR3-YmKIUzM znr##t8+$cu2D5{~1yY>UA!!ALHvDw^=Ie9^(t+Iyl@q~?H~H)2MfcY4Au$pEAQi;e zDc!K2YiCh)qRopYa1R(6aS_G$hKZ3|PC16-zkCL#FHeT91I}Zs@K@0wBTi~|s8~=A z%yk~OqzAaDsUd?K~^8B9H#=NWDU*|!dJ zsFnMg&3ASQXb9^kQr90(is(41k*9+>v)eJf2>2UVf?6GH78zroV#x8OJWAH{-a$3f zIio;UuVcD0>42SW`T;uvMdP%o##Eg1EYx+~=5k#ZfvFg7eNETWchkm*PoX#?TnF0% zSW0;%A5vM5mC9_-`u9yq?HfoHu`y@6m2XBj@G4)@VNhMd#yH*y84Pf0YF@X}8<5N} zPP|MnDTF<;VPs{gOmdsE_dP=U;Bzee+AG0*?xqP>Ci8TbMLk}-+iFWoXCW0Y3_U30 zkg8Re9z3~E!2|I?(Yrc`r(o0bG0PoPBN_v!oT_P{mvOH#8|>B2ytDMgSz|UBso4=a z3}nhOY-zc%VpCZmqHdVJ)CI<9oVzlm?g1+!L`DOv-@kX@a?8U6cWaCfuW0iT7qWi% zcHV|e;;}?RcI2^mt_Gp)ad8qF-%c^IjcK(GZj#^I*H77C;`R1ZzMl1O#drFG)s8Vn zj4W-4mFO}yR4H`54yGIK2_0Oa#|is(Ocv$7WGy8dnlOuz0<{n#39Hs!yqpc{Cw_lA)0VBBmX3|l#9$^sB$aE@Lu@| z=MVG)q<~^BPQ;REY37aQ`*EJV`t7}vqC1`au(Q{IA~Q0TeiuRQGwEm08#JchKQULK zqVzUgR+G$GpwVp0?_z6CqzWN!8zLHnBIk-fKEEy-I$7hDiZA}FP6-{<)BtIUGyP%a zkWGrOKMR)Vpu{H88CP2jKkmrH)4+us+Vi{&N9VHjqT6+k&AS-R<)(nqfbH;ltkr3X zy#L@4C;I`Bffp0u!JJIZqx8ibQ903KAq`a%?HhfC-$$%DYxWLd0*WJ9+noF91d@!0 zGuYsn_fswec@0_;nV(UeY@u9lG|i z+?+T=Pq|0gDiF-<%sqC22HTzyCur}aj@=l+RM=Ia(doc1u0YyI~Q#h7TWw3b_g7xgH-G^p_$g|O@-tx){`?idu6eWg2fgbp>=N~E&#Wsf(_CulA zQjq^g0PahKYpriL;Ab1>j22iuRlEv-3~g%9k(CcvToa%`MEo26JMN%VF0-*_fI=6$ zQ^;#3!-+tt)NJ*VXGUufR{`Rnpo)u)oZbkHj=C#WZ zA`}^>^i{Zo++DZ!UM%X>p$RBH|NAiwDyjxI6`jF3{$Fciz)T~9U}s)Izi(%l(zetJ53Y={(qVi z|DvAj;2P%ACTM8`3bnK}7-ZatLZQ|pKh-*vw}gqnzJ*fXLms@J4H@p4Tvl1+{KZktT* z)NGHRc`}*us`|+h)%JLs_T86Xi*Fq78>{eUeK$;)=G$(|h#T7(cfHd%wCOZqT-& zTsjzm`f()fFEJHPhzS{Uw-6C=oyvDbzS9{?(K1isY?|Fl=r}L@S^vUC=E)-EK-f>Q z_ZQN#!4C*8=!ycu=M{uKMW+0jeDp85!**)E`oqK+MLzgfR zwmS0giziC4ehbw8u}(4M=dga##JMEE7U+PEAIRPNqa}Z4U?*qGhU$jmPX_ga%#o0} z$@r2H;4R|CT|W^PKge6q^l@yzg5l)xWd7jsF{+k7)$?asT&&? zl91DJFoua5pkjFp-g&On>rvl)U|oLa60hO(AR_%rY+M}5<%+bAS3T-zZ?VJy&E&I_ zK3+kg6#n2QrZ%x%dfx(T(VMB{KyTHRf*rh`=%U(k}rG7gFg)MLA>l^o6De5mrJrhgix$S+h)-3EWR_)NpIxTTLneGb+XM6se1URrjBxLo*4eeU9 zx3HtA_IRK23-a6uv*u8=J)$EvUIcB;I?7W}GSG*{7Ps_jJ$jTbGVW%^cJZ~L+C`q0 zWGU}jahHW@RXI7i;_ zH?_8fahoGnsack|!|e&Z&e2!X{drmg=`y592MikOJC`1~ur=zar$ubmZdTnTwLjN* ze7GXe=d+JxFUW-i3bIfPwRcy_lb3c}T-NODcbwfy0b{Ex~}2Z=2CbH_*fj#*N= z828y^mnK5ex%Z?@&I&8}%XUN6Xf|?E2Iugl413S|Z!hW1GxXH%ti8}23IrQAP~J{v z?*Z1yjo6vX2y@=-Q9$h*mO8g_=H%|>F7>HNW0&n%16CT38;nY*Rd3&=W>?jQg=tSZ z?B?`-O%zqzNNSZ=hCv4=w?`ctkva<)RMoz%8d!9p(Q-7WmVHlharM;sWS_nH<<|lA zhKaE9cJi+uRJ4Dz@?E-o$F211lP<~aXff@Pu^WikoEn|3r4Z5aa46S99AZ8*N;MK1 zY$OTASGX}5wAJ+b)^&|wY!Xk)sY5;oU*eCtK}(h+rBqtJ^cEPS z1XmyW+;Bi=nWclSqZ8tYQ37snk)V+wU*m1Y{xpU=`3gz|y}myc%%7AM#I)G_=;O=Q z^|EKA6jw75o#M(9;DE|KH%zh1PZTpc5>_c`JgQBM8faY?6)k9tv1ycMRS0#Kb}5zJ zYHjWiov=rg?`5r{7K>4_hI+VR1O@z#=b`uRLP3dna{+Q_uV-ujN1Q1S{Y~O$8ckKO zpuI{*ly&t7TY1+$!}u^8Y-Mxt_N0|7M4SXrLrrfr!o}62602C zj!I*#y$s+QS!N@LyF^!bAsl>>e^QI=;Z0{O0dibbBBx{E9 z&MHKd12Or2aCEbkJ#{!(ll5ce!}l*^jBsduau%Mq;#k>?@y@ z+vV`)#)~;+*SfA0$LN_D(2?ohw0?I*5RqpKhu2qCaVSMGiOn)XEPvo8yWQ^V<`?u0x}1w(TMY z6T_{MKl*@+fV3TG!v;pFNg2Rj|Cg0#lb`3H%P#SyKvkDA(LVWynN49T_O_{0hcI%v zcCk&hg3)K^5yrVsC03S=jcs`)kXN66Y5T*?eaSKxVFpi%LvJx$zm^5NBnb&gd5`bD zq&T*s&m3DW@D{w51;M*D{%JN1u`wa)-wL~-;$_jPg0q*lux{iBOO)?O&cqHk)LHlz z!nCpRRw+*v*kCkmL?ra-%Fr-7-#Xr8?`emOnyRs9!6sg7aty9xPaPnFU$5wldT(QR zm7yNfO@AcngL`??+AG%3Cyh#u85R;t zr2&Y_nbd;=uWht?fhkw+?sRI}AQ2>S39UrF$`h#FWcR+FcSsal*39T}v^#6zKf)Sz zXX

o&LzV=U6+7gx3S#kM>vMNE+d;XA`Ti6!AQ6$ezypzSVCZ?K(cF5;J-(-KwJe z^5zOFLfCWh(rBx^8Wx$|x;G?G$P4jZ$jcd17B38e^YlkIWV;MDRyHiWD&#e4vMkA? z=1we;8c~Y$o_g4v5#yLKL@Bu$ZZA6|Z(WeHU2dN-2ES$`1+K^BrQuu3iv?8^KBLNX zF*b$AUs;7I7{vQAmW@VdNdI-7#eVt{YC(^wnqZTdFY_riyYBMACKWQ=nu09_w($kkkhL+{utJ53#>8y2ycu`qMbk^W#0g1GTxSek` zub<;kadJ_yOL^J{@S;nsH&nM95*)Rl7m2jPmTU0a1&3VLt@jz~9TG91hdFmY;ORKe zUC2zH1{;_EA6D39f&$A0H?^U4<|vd-`m$&x3sYnwt2nK_&_H!jk5ze)Ei~*g>g_ zRbip9aXvG}!}KbP5-qN7ec)KdjeK6Oh}pVTQJ;O2{D$U+i3x8m(iy%@f=cN}TfTo= zq#QDhcB$KXT0z2+w^>=A9z_yc83x_9DcM@9uiu*QYc`3sD~~WhJ;+=zXN^HxhyyRk zH7bNBd#}@E8{=x~S`Q7H>g->QMvJ;6J5eYtKrPsb!3(fHk&kvKv5drHi}Sg+=A=X6 zx7O$P7U`WTdJeA3ylmm4>uMr$7zXwy9b!p`Y!uyoFvg8)DBP+V5YvTO=`5{$A=z z*`hOSgDuYZU5u__t0ks2l#PA_dBFztqDi&i-r0A&&V707OZ3RwiAzA?v|7k$B@EdqzE~YcJ=_unO|%_KMWTHGx{4z-m%Y%}5Qu7ttG0z(ea zwc7u)-=Ik5Daqf@ES{}UK9gVE^{I|zTQ@YMLT^RFsB$q3=BW~uJomPdfm;~1UE8S| z%LC&oec+w1KJ??C*zue6ypl_$AIFphmTr7j?OtksOm`c-l^;bCrxRDuHELa*{J-H> z#mTE9-r3l4V$|0R5A;i(Q8sb9CNzf!j+%`;7kiOeutGyuVy(2DRrwJzWmT%;$z!K+x&)YIT)aku(Mgm}a&Sr!MntsnfZ*|F^4 zHdBF*rFw6Tl%o`f*>1vL2NXGeH6OAZ^|e4ybD>o0Js9Ci;YFy~6i@TGEq!q(B>atr zN%RR9FtWE06~`Z8F}0oLQLkUj(!@j5ejU<;y5_bN1TiDg9QxJ(+^Xed8lKetAODCr zn$j%{mt}a?e}8d~+I~PY3QB25_y%h7ko6;7X*SUp?R%pswXF9R%=)#d67QS&=XQ)X zZ|3!I8&zJA+}8{l$XICpR9SSZkIu;c+p^^l*C_6duA}RJ8|F--MkBg?<1y z99oTaG0>3HAZXN@aIDao?X`nwL?(H!E{qj&;?<}c?}!F}3AR#Q{dZ4Pf0bqh&eA#6()G`|A#gNOW$aaxQG8=TR+VG;sCAO}l6{5~JkJk?Q07<~Xh1qlT&{Zf zt$uslNxHZ)LLT^j%8r#KAxR^3Syf@_tPvIg=SBy^Tc4w~_ZC>IbyjNZZss|wtl7R# zAu$-#-JhvPjxIYt+5HhGD!1h_Q`R9e+A@YU|Fky+9RKJMLtpf(63qMb%71w3VF>1d zyj+~H(Vk7@;@56NavF|6B8GRq&6S;5iYFoNb znv<=ama<3lp3kaued!{_ez^s%X;6L&)<3GsQ$zvZCPRG>{9)={P9RO)$Uo3-afOgL z*3{3>b(f-*&|m(XHpQL%&Kv=R^f0^;O8x@--2mve>Qy;PP`~@_UiCQeDwH820=89i z<tMlc454+RumP4AhkZIk;qsXRid7LJ$EUjsV zHR2^{lZe1u^u&V0Zf3Ujs(HK488f3w&Wm{*{K&?l0@(em*Rot&WfyD(EA;5^R>DW) zax_h^DQA`NHvWM6b_fr(*u%_why)SHrnZHsy?X}vZ}MHrAS26=N27)O*wC}^5kCw? z)1a{V!eCM2e(It<6Zw&yKqX8hYvG}5UFr9(hC5cc%BKG3CMY_zYJ=wd(lEjgEuV@t zZIZ2AR3~r1bG_m}kKaa_c2&$bk0dOL_+m`Uqsi zEqV;n9rf>^{2>pA64or^^_IdhfCtguFC6^KNVs$Yl=my^F{J&=>~`D4Dls-g=Zv1% z5r&Wq&_$2b8)>~)%>M`VvTq@w_5m|;yuEXOviT0(`(J!dP=S~ox%9zFKbBF z<3fHIxYUzWTH1MAx>R0(FR~|U?vDImsGI;$Qr|^y8}7UnCS%_}F3$jCLP?irsbEq4 z|GMz#k5s1O%91y=)eP(Zg%^mCKkHcVCuIyzCL3vezB}^Ddf*T%jTu=p$EjtNd5#*o z>+GZDi?G!dUc5|;)QB?YJPBU?hJk&Q2WIIa@n}wE>l+>>a(G8aTlod+g2cn|;pD6K zruzbkS%^H-MxW)Cc(D;FJrnn=B3)eVaNCbV@3JT(?g)l(|{UDZjx99s(yJoKT z6Jnkx<%{CH;RT!zm5`r`2ax*#hU(z}Tnb-&-9ki%TCQ5~NUUn=lYb1O=_1lLisOz# zHlr<~I;?7;z)NMYKt_?!zuq=%z<7To+6rZm@W5m#^%*>|GVL!n>PNyxD+lYaZsq(f z12JFVmEU{i4Fm@$2ZwZHF{w2TwFZYgiXwKSU9pP^&vv)7is1+f|1>-whn&q7#Z!I| zt#jd&fWE}jU7@c3>j1psFXrw8AK(wcrOEJzdW0|ohVIM=OdHRNwxkfSu>$t)E;S&0 z4Z}1{Px-#H=Q24bVd@NuZ%&v@Fbo=~q)%S?3mDSx2GvjYxg3m;h~rB;9blQ<9PuA< z-AI3q{psT>$f;Jdliw0iftMY@Z{F701Ki}dhUr)L10{{UQ zs~FRz{-UVK+^7IU=_h;fci&Y6fs0I<19)Jq_i)gkDN{WGEq<=d1KWI%`@coWa)6d@ z?gm^!QBG`Jm-KU<7s3ju!Vc2TDccb zb=P;!oOKdbi;klH(?&pqBcoa!JoCvC%%9ntX!_@dgr5WBKH$(g`$rCfC9)a6_siit zSp`)~F<2}7kQ30ce>h)ot5dCt1cfA@XxQKWoVtSyP&+-ByvNC25corY*x7tkE)UUP zEIlo7Kc{&E;Ry zrMUEv5^yhoKfmM|BXa#uXKkPnUCsY}KV`Q4AWwkJ1@!6l)8I|I$&sj^l#rMR_)PS# z9NtC#=D)!MLO@giR+zMX_?Onh<$#iSrnH2>s8oD}hQVOJ%@x3?63fx2HWGfFaDt@n zimm8pd_3gW6JN*zsT&L`g1~!yLZp2eKX%${Fq1^GNc$7L0T2Ir>4E#jRldgSVyAs~ z^a0D>oGdf&x2@-@0HY9zCn%Ku{zhAWogGe&vH)cAt1mgcu zgdOU1OiexJH7NgN8gpI|w)7TZ#?L%}g9>9MyT|`R z1qi|_%ug?+NmBoZBy~Pi8UOy2`}xNoL_R3AT{R5wyLQjd>Zev#fLV?g{be1K{Df-A z>yx-ovMj&V1|j(ST0Mz}L2|)FWH5(9jK9_U;Re-U<;B&P$XT18w=dpks4fEShC2&& z$e!MBExh<$SWq(z_-$4yY!E3i5L!wUgeu9LT9GY2cBS;6%iq`AjxjKzSq53$FEO&0 z1W4JYMzDk=_5nsYzaV!L^?gYN1TiSctmFpUizIS@g~XhT`yOlBC@@^4d}q8=Xws&0teZnn}?r&=*<;DZDZr5>%vN4CH^nTZs3ZJ)J$#P9`$lZP6g%0 zZ?uJ3`PUKUeLs7AGi-)aWJxK{ecyNJR@ECw4fVKBdH^n2b?{C-znFrFtoxKdgzvnp zQ<;X!NH%Jv!3acT691LlRL9oLricUfPuOw1E}Q4wR^9M(2m!H=;tiMa$Y(A)C|RaY zQG~f=jrni2UX+4H#ODm&57X}c;KCt zfz+4gG{yGcTg*juuG_#6Mnwtt)sA**r-tk^r@N?W7@VUX$8~B}9RCQicd=J#HPDlL z7}4M=rE^>MDJ^&Qpy6GK{EV%V$mb(yVoUKA7f(K(z9@@xG2*_mx4TMI+DsSExh>9z zo%#1R#Cva3Lqj9NV{H#-*VkTDgTBXN&eZEn@IbR6rA5x2{&zd{L%v1M(eDl90ftPH126oofB7;tb3Zg+_(K^Sh7xW%4{YT4+ z+La4R-ily3-j&Y#92B(VW^%Y6c;~aJhn(r6BAa$G&N)zIu+I=$?JmY+dHemc3Ar+N z)c7ciDU2m1`0I{7^TPL9;ZoaqH4|Ok>@MkJK^%q`Un2T>3KxgjGLlTWCAhc z;lu3Z%hGak9q-VkP6Y{(rNwmqjkG-}!EG)fg5{_x>gfhdetfZGik`BquHL1$$=h`e z18bp=wdv=4igKYzyIw!?RB)L*depCYc4XF!Dm9)RSOgVHL&^{h(c&;|UfN(`@=wCN z@B*hG;d^om*(q1^bUU5C?%H2pD7+9RPI8kgzhfqD&dEw~dwgcsBf~-vma1@Bhdm)o zq*se#?u{~ky>?bs)>Uz5>mMdta+UTEc)UY2Pq+Z(SQ@(zFIYk@uf^|M)Y|u7Z?OpV z@=OTzUM0nj+sPfek5(>pYu={2vG8Ij4+`?!Ox`Q?|K86be;-O zN>d)z=eouE@QTX_W|;MhG$ar5G^o6u8XR^nMNHI>#zose?x@|GEjeE7h(t?k#9%eg9@u+ZUlnAIv-Ashys$EE{l2)59F{ z1(>{#DH&Xjx6v*iw>+kIa5PRn&4!TvTKW z&9-zaGGLBSoCATOL2~}OG&kxTl@X{?MwpRak)cR)Np7x5016?bF<8c=Z?wi78VzyXIbKMXU%4-`#s0RY-VWbY~t46G6pL+Yx~IZH@6LBxgV~? znXEfJNXU9lNp}_Sjz*Lta+jc)Yu}p}4>r2=0R1QoLkqch5KV0b3Myk5T&{ipkrZp-RR9>lu4#E`lz)EP=OsN25nPR7@8+ z*l345YPGmOk!DskU2Buv?NAOftxw;atqNjvYh;mOj7kvhN~g<4a4M+`K=(|n@*&&> zIr8~(US?~nH~)7lrT^xJ@@CeChwp|LMw^OuLQ_4BsRuG7btdK*?8KPn(jMmHzY-7f zY!>?SmOWCQv;A*tNd-5}Nl(4xu~a#)WV1n%ng4zxS58wwS(o7 z4m@D^{4ufVyTv)2%lP(s^7Ph!V=@VH$u;2z(@zBFKYNI8gW$4@f*UNlYN5a0bK7If z9Kl3lNcV*dPTzftTOrdWqf^11cf-Zle^34#{Zl8#e3EuNC!hNz8G4^3hkNd`P4qshAYpHDG967}R zk#}D4o^(-OJBE+>J)B%BhPl4WzlmH=oK;Rx7meSExK-Bt9BEPRdwTkFlv7 z?4dB!3G^HezA->D=%l)C`gD9-{5Jc+Kvmf_V}I)>1*#o*NB;O+^n%)Fr268#h)e(7 zqk=RhJ8hG9pQxL;)|yN-_ltv)cmHFl-zhPrz~;;Csk+;;qh6$kRNBuiXF8S=NDwOl z7eldL4tfF7v`qx-SD;_Kg4E;(HW6O!%g-iVtsGILroL1WmPI?XTFIIhdvPvP2AR&N zo?gp`Od%nr3MX?DJ5QyUL0}N5#he}c&EAdGh+*FK<-0)1qB*Im`|czmU;o2ozItrS z22!C)3n9)UI)(Uj9)O#ih$4`cdgdSN1@xHNEM)uyF0|wW-&c2+^V*5i3}MCq-)Wxi zrthim3tW6=;IEz4F8`IJ^U$4m_!1#;f-ZRT+eo%j{OQ|d1^P-YQmqVJKXqaKE&n10ptx7k-q9UbywfhktsLPFPXgCI&BL92{w|j3BQ|YS`!WHmxErh@ky*4MC z@CV;y>M;-3P_Ldv9p_4(_LT%{z!8)I3h)nDB$UR3)H1!?6F^FA;8(l<063>s4EJ14 zeb`ftoGQ=%4R}{rzKFl~TP#h4aF8_|kI|jUqohxV)dl`FqD}4FUoewQNEK-Ksl(E* z>@^6Sn1hy(7=N*iJ`{ihTm0>@lSP6}4EJdFgev{XBV%3-18G&#RCPb`#q>J@7#~f}cJM zg2$G%`?+_3IfRQ5-v7yu;IUUCEKXxN=?Ymsx05ah66@wj7XDa2bGQgF!it{ATYoEk9*|%vsk~ypxeWp$ z3TkE-L$HRv5BKrugug+Y4_G};SxuetuR}t772Fb|1U!+yH_R`UIG3F0Hy}QLvU~`0 z8s1K@xAU>51P2xVJUrQ!F8X;=$-)SD<(MmgSUT3@>YpUS7l2X{y>_@%AM-m|5E%3` za0o@4#iM6_&P*tTpaz)jGT7)DRny)RS`6&PRj>j($XY|tpS(Q+BA-iO4W5)5(qJQ) z$%y(dfGMt)0azX;5tx5U$M7^lZk`$cQNsJ1-B3@32;}W-bQNT(F~u;tXnW_4fGJ+b z8~R=LK3VXLM2IAgGnu=?tt>^>-bDW4kyp&blYk(QWR`V?lxwZ=SP5apAN7XTg^VYG zr^BNvl-T|r^INdo_e-L-AOo?6qtyImWNJ$BC#M3=wXGD@QjuGijN)TOVkVvj#unC< zx2Z~~v`+XqwZC#+$h6$X%yw>Qhcz8IMjuS5vzh2aU!Ob7ij2oCHCYlTC^E~8fD4E$ z;W1T&dFoaDTS0)@>&(xVm89`BO?1!q9T9Ls)T%^ z!R+1Q9ISgBKU+%@sl+CA@FY*j-6|!|y3t3u$SnP)f3DEsuCJ(&kwy3X{!OLl=U&Do-eUw*f_Cr8Wn7l4cPe>`XmVRh3VWCh5v%4v+ zanFq89{s9nynq}Yn`f(~n&e=1*1jYAR3&%?Y4!H!3OgSR&)NASvU$`?x{iCLq`wZl zdl90yS6kaqFh;~%SQtfu0$G*M;^X&7BBjTRKhaAlc5*nHWBW37;9BPOP74zeG@S~o zjd^YbMPm{I(@?kc1j&sz36g6s&YOCw*be@aUP~O=8MvC7v|w^SqmrJZ{7X;J=Is&5 zqXl#bOf$X>L+yol#hHJE9MLNd|9Vfq%dXJF z)*G8axRAjsVBl5Se*a5Ml3R5oQ|jcK8Haas#Z27gYc4@s-Xk`bn$rW+XVo5mAg0}3 zE}9OL&L4SutF3YRBIkP8=y~o}3JgRR8!>Knm)Lx(H5Tep-$~SEv{<@w_Kq49n~93F zo^$zrHLDpH?9&Hf@0V2E&re1N1s;>UJ1TkHH?)ejD~VAtaSHwXcwxMLUsLPGdKZ1c z(1YG^zLZzipK_&Lrf{jbg?A!eUVJ9ee#JrwcHCiq_+yyDpiD6i?hrFd;V?DmovDV4 z{9+?hG)s&+gNzVSPkF3jd_UAuPke}BK;>x9j|ED~UHcuSc{lJH%)U>weYr)w{Cj8+ z4Q<});WjNuz{uvmq32Y=pBFMJySL#Y=V4MjH)xhQ+!!Y`t&d2o5ECiiFJ&AsR~dMS z%~9!BmaNEjBbH%~CR}ObF5yY6gKGeWv{Q21n1V^ln7?lI`N1>nN?@O!##4iPlu3;> z>l^n*VoXp^;+;jxQHv$Yn?_2;W*!v-hjtY`T)UU~&girUb)9eMCy&q@d+2IPp(%T( z?z}9WSBWKcWu&E8hHZVZPG%PeXIt}1%0XLujO)~EE{P*IIS{A%FV$z^O_1Y~jowA2 zvc_@kB^+<##P*=d~+xRX3-TT z!CDu)Ig{u(2r}?&5X(ZY%f=RFdrPBN5^mQ=!AGhUkM{0cpKt*Zo3;@#;^r9`6^)r8 z!P(pi*9{?zm_c=kR?433IUkDKp%cajmE#;93X3ttMGP}r19decyA0MrX4m`Nc@7@E zS!cIrjrrR1P9?R!E{1Y;c*E`B>po78cifWxvwWED*p(jW(mzsPJGz>?GA7=26|2Ah zR3F`9mqlV!mt7<0UAkc{>a@%wncK6+DxwuYx2d;Z14BG!XKV*?5F<*{t`td^K?AFK zkdg{la0?TgxvcW`f9cPntDq=&+ZX2r*aSC!LU#>mQ9{f*qGu+X!|7?T$kqQz7GL?H zB-x*(9_Vaxq4DgskJ1(U296@WLm=?nHDQFMFLl(~G!5Ud-fxz)J!-vsU&QFH#o@SK zf$;VeehC$a8)~!;jrH%Cd<)l)kMww(-)Kn8M%6MiQC=zV9M!em|2WUJw|s{U4a=TZ zWy({T<+Z)DC7{b5cDNk4S7AMLuM6pEAh>bVD;2!0U7{-)Q{*u~U0hnj2<~VPzkJ8# z?(`{fl)cH|>iT};Vv(Aa4az~QztW=6gVvx}u8GfVr)vlyTqIQ7Q&82T)Y(|COo?1n+nfMrdP89P; zCyCjLzze6E8AyZl{Ch|4*Ny8fBd0KwT2E8UBAq_`aM>=+;nvAx?6&Rz!13CI8fFUm zLG|L?R-nKn((akEGWT+gZAoR)!e>%OH^|4A6w17|{ka+mLN<~3ta<699T|{g*;ot5 z=70FG1f8DnEzsFqiZQYa_}5owP*70tJ+Fm_&Aq&b+iQ$4;ZoS$C-hPOB^Z@TsN!*D zS=`o*VH}#2O)$m{M$g6`rfXhAO@lddVV|^~by?}o;ci?Kh*>HNWMPoV@4kWwS*|vl zQ@L~I;4tQ5i9Jt8O0MEcBF)H@59bG^hC5Q4@0Xbp^3uiCF_FY5#(A$q9&n%;JL%^x zC}@wxe&y4-eEZ2m3(}4RVdci-BhMe@BsH_it|@2#xy+18Hn_t$^!bvhagC&r;F&6@ zu#p^T`Iv$ge@}mJwS3WtZUCD0Y&pe9zVpCC*R(xA31DB$Ef9*ry$t*5$lN zO-V`g`7;;B*Ea^d9o|VSO`b(X2oG(Rnw^c>smZ;<&%L%lr#U|nwB-qnU_73kMeh|m z3vs_6``FNUe{rat|0WjXl@cr{3cToIH9 zS;yM5oyl5>?i8<@<_jvi=@*OA4t1G_VTy6}d9Kk{N01MzuJ6AT$8OF>Uv7-iZuoR= z_$EjB-lOyxYsK$Tf|l9`g0I^%=k-qAhe-7OZn3FJ>1zPWlg4YvPre}eOwdn zGtC7}<|;8Hbw<|I7nVG9q9RRAGCxTKWYS@h{JvA$$g!{D8a#8gZr)VUT>C=Ly^9;N z6|s$8FR76aTDNNJyL*9OcdGs{`TGiy%?}0|%n!3Xwv4HirTiPf)0tD#G5*pGeY2#S ze(r#0<%a*ty{jN#LtLAWcsc(NTMYg5F#zIKMn8A6u|eA~tC9N2gJ%IIl%6k{l@3+j zgfSLH!YZFq)79-4KMo*8ZQOCE(if0&0_1$sYOl zDaB+Xa6_)g@v_c{j(efKO*3(ayu3RjhwL{aLQ3LTG}f$>AcDeu`G#3fB@l5XBwiav z-|X190)eC7&mKOZ+k=tPGtb~oioReq)f^0IEk@-Ze4)o&zWCRmy*$<+9f?5qIyR$dbLAKT)|bI|J)I8 zHkm|)pUng?OtijX`lqL_9tb(Ih~r#YLM$r2zX{-d38W91C-S6lvfqyr^fG>;NZA$+t^y0%qjeGpPXMcgYUQWn388L`jiB2*o;!b)3 zx&r|1qS3&jzrp>ECIFvtn0r}2(cE)x2%wihWEY^c#S053!7>ox$^=a+ZS#_Xr#O?$ zTpkP|*ctt^N=h9;fS;uQX?DR0Gf>V+^~O&$@m}<=vL-xsqp}8e zPo(-1=t5-djpQk=Ea&b{>pka2|4HugDNIen$HI%6bN?So4+VfJpb6w%{KAIe?L?0p z=?NW&!wArzj^$VDX-dXlaX}R@k+CH`!;{jy5ZZ^0NdSFz)bM59Jw=*20Pz>t{x9q_ zhU*7`05o@|S3~ym5(IO9L0zbNG@Y|EF2)MQrY}`QG z;_o+9RjK{YslAc{DXBT)e7ua%Yl8Tn!u`PNj9AIJPwnJ6mwNp;aovEN{+}ESsuoT# zyQBrxtH35s?1zdDw3TiOVSf>FV83lIlD!uPp>1aYl|OAC08>N{m{;syF;#zjXxn~B z!TE8N&0XYSDrfvQyo8BJ_BTNOyX)lwt zPA}juoK6A8g}tH!J-|8-SRpESGYtcM8PgSi27!Mnp6Y?WF{N9;2zUQ!rDIwv*v7;+ zk#F!lq{-Dq!AQ(?pyxNNr{O8DaPMKBpC}D)cEsr(rsJ6$9oIg60OvU%0{9vFU&HfJ z>7ALJCt{Gk^V9MU#C0`2VHF@r|M%%h!|#pZLw#`OPPWU>FBMqv;h04K30M031_bI2 z7@ozx&~(F-=MfO80On>?D0KRF#scIEaa(XO?i+6vhlyrnnE;;UIba998l}?ZK`%e; zI@#8o<-6}9h@5S9~~LN zYT*Of&5VnglR2vXyG}9H^TshNgDPv}lrcUB<(<>^vdoG=vv(JY)CXhaNmZGp?sAE> z<-y0|ch-2+K^Wq#gmy#o)%(Uc-`*tYtbYqQ%Q28HgBOzD1Z4sj%I*eiZd5;wp^4Cc zupe?IjY86 z;3Y6}!`xY}Z>0X2TCaDXjaMh>`CPpoz9Vl~9w-Q7kHK)W-4tPoT3wE;p3!DI@~jhb z@?g8S^jsqA!#jKcoNms&<+@?ILRi*CtQQt(=(5ofXLxD&KOvnvKI;T*%U7@SCYWm6 z^YMQi_f$!SL>}7JX&SQL6PoDsHRj*A`nsMK{K{YRGo#!0Eu%$6Ajp7Fc3z}q#jcxC7 zKS#&WH&W#C*oaE?;4;dtT}$;sSS?9DlV?vxXIyQu&bF$3OzeRImz3;%)#7fB>g=f) zD^q;7!BVWbK;HWLv#>lw?3?HG*H_~$=Z}T%n%Y#x<{B48PrNd|*Pv`~M%r`*`y?g# zx>DYxylW_X7}11x_D&6{vU|t1h8fKb-JoP|M02u|i0^_nW;7?P;hLnOQIc2r;Fa6m z6dv1fqKD24bczkTNf$*^4jtb)EOL10$NccE`kx+@8NELtT;|icveIzOCpatNZ!Kac z#jDf581svt!!C^CDekPFHkxXwJJI0AC$tf$~8YPduzE<`lb!bxhgY= zySFn>=lOVlr@+*#eM!LKhS0MS3KfeXqPA54fof2*=a<5a)^efDyI;M7QWp-Oi>3MN zCI<#(Mkbo}JKmZNPE$Jj4)(YF*V&UNMvSsru10Q%%93=}2{woMlDr!!M1$Hv=ix_z z^B^H}6+1US-5Moq-OY^gD3GR{*`86-^AT76p2Me&u)dLqxzbV|OgqG|ckjPWdR;wa zFXIAZ3*5Y@w^cgxvv+dX=FIJkNJnK}Unin*L4nYaI z=)rMC_YC&?1x3Xzm51D+@2_q@w8-)!L477wEW>2dP2BF&=BzdOVQG2589w0WT8|s- z3zb;TRY*dtzYic?4CZfW$&HNrpbN?p@O7Kwo82Z6-xbE2P9C!#R{Igl&OBHnWj zUNTm0W-DC6NFsmfAX80PS;5*H#xuSuSzgo1vZr-n|ATz5JbdEWa|{IrcgLOj6~-ss zQ{iQcM`D{i9Jy{g4u4>p-!xtK5S*O)5zD=;`5Yw9z{;j&XU({F61ja}nMTYdJhE%N zq(ya~6F%gYS6VYvFO$lr#xL=HSxU38M0+#od(YSSopV8ueo9)X?;%e3*|Z{q&(1ec zfml_sJ?>fHdwis*fvk;tU86VcU3C;Xcg%Dww{A4KmM+5TubL;a!ALkIsNWYP-vZMYe%Kt z2*Y=sBvZdsg~k*iM@f)FchNT7h zqDEbcBt*uq1oL%$RxNv(v}jP@uE=dm^EHLE+7I|LimJNemWy`#vggxgQ}r5^`D46< zF0-UcM;?2sJViAkw7Q1RtZ^mPHNp75v>-=!-I=Jd58V#fi%%jW**O`izq^O$_z0pFd_m zv;emh+=eu7?UGjCy>6r!Ji`s2b(7l@W0k8JY!O0QePD~T?sq`t{opE?dmARL8z#A> zsHIdB4_nXb31Vt2=!eVw2su)Zz=?Kryv#1pQ6@osPtrV}{5my_983>s7xK7FznenP z@L0!adNE&$;WMvmJwm!5Rrqe7u%ex{L=hJwBMBK?@*Zy@&+fAR=ddOA{V*MO%7&bl zZ0|UgPYD*p_h-6>GCY^_s`wi8CE*ho3b-C9h_vV}dk6RbbViTU=jgiTwhPzt%9wiy zni^qY;BWC9Gt-`J5GuTsAn9+t6_jmGEWlbCWN6J@^iBrpV0r%QYt5P51!0u&m&tmq zC~%$bD0RM?4q`~|K`Ql%*VnCFn~Fv>9-Dy8;YFELr3!xV>?Y^uXp{@43KlAzZ_T_I z$5ir3WtO8C5w^~F1bG(v{_M=f<>@uir0sftO?#)j7I}DL;3#Xep;}X-8N+?2SlZ!x z3@))E8s;M^QpVo{xjtuo?wm7!T-$%(0=T7>s87kPW5=TYnskc*)9Lu-cY3XK9tZ6(q1}#-GjHu(O!#Ua%UNqeZ(|7&OiIe7FG0W%Xxge z(^($QJNzT+zX!cm`5?#rfs)q0M0YQ?&`%MgjEM8Tj1(=ZnR4!q1q3ZUOWScR8n1n4 ze&n?sY_nqQQ!|LMo0q&N<#x1 zH$p3=77MT08O$V7kJw8n#q-Bqyzo0iBDfYGnigZB>S))REvo8_80`KB06Y|+FeW^6 z&n+taN?HKO3UV0$wvWS$6(9|SimZwN1g8DN@%&HWM;pEqnt%!)Ku3Edfzpzn5ETDx zkdvQCjZtL91IEpB;etRGL_mqg)3%v$KZDypfpV@^+H0b5@%D$TC(i*oB(6)6)WdboydVw3uz=Ej@0V!LVp8J0Ok?^){$KchuPj`JuuVSg5kOfK8!V?^ z@PRY|u``2@wExEXgkTxMB!IcYuk;xxEV)jFFLCK+A|m*srW#(LrqRR2dY8XK`PzVm zP>_hV{26)&sW0^ate<`*=S0UKDTQd9>+-nOU%4(+G%;>L$gc|^y?YTf0T#+Kog-OAMPe>?GJ%TMHT|utZNfq z{z|?mEhMm`BEy$NT=s|upCtM{=j(unq3lPlm=_5h6VP&%r;h_=^u%?1XVgFoWRN8H=lsA2q(GhtvGQMHAs4Loya9(Z9)0bU zCG)xgD3FZKG%hmc)1)8pwWmoOm)xHWohDzR{uZEs64D!yr&A%uQ_a=h3LO{zB7gBT z*;HrF{IA*lUsYEg57qvL5fNER>PD856ye@%AxnvrnC$D&LRn%8W1Gg(trXd}EQ5?~ z?1mu*LtWXjGxjCf89QV5`;L-+|M>Ko&Y5%0cRBOE&-=X3^9tZvZ*;(6vD=y%`xo_Y z2CE7DJX)vy3I2k|AJc}lp8UDiqqV(C*=mk~HF0KAE!z9{G6DE3HLO82bLC*Rln$n! zav0kgY8%js<3V`@+opSB`%n^<_XP^}bzF5W>OiVWi7y`vUDQg71m!SqM(Q|lliu&a zy*z#&{c?Y^Q`2J44$XNzcm1?DPbcPGLlLb8K%T!Kh?6Njp(>XR|UxXUqRxs5Wc#)5t z;ReiO5d0Z{&VzrICLaoTzEG|;5YrhRxGs7AJ_k)DV0tk>CTQ8xzPNlZ@s*iDl%|d; z>*lApoebkebc^p`f&cImobJ}wtT5Nvqk?O$(Aqh(1#?TJF?vJ;3^A7%++KjI(8Nt2`!HHM=&%27^;v6! z!-d_gd!dZpR#ob2aq8;oE7iQ77o+aJ$yq4)r0+eam;MB&bd6IqsQtuvg9k*UrEb=? zcviPqRr(tG@437o$Yduu$<;dfhDGWUNB5c+fShbj8UBqdxzO*5_CT!YN!oU#U-|A; z&C{lOi^r(=+czvtt&yTyn__s#J753cv_xgzaM^70yl;;FG|%OeAFi|- z5I%nTO8gKJ-p#=Pt+1t@r6ean-wUez=IC>CMG(;&BOYw6E%aEYq9USv{rqhEeV8lR zU7>yj`RuvO?Yhvks12QkA<4uRN&9H-(12+FnL8Yn#y6)iO6cedOQua#G7Fj>TW^og z^f1;z`~LsN%$`i3r0>F)zg@~Lpvp;whv zX_K`w#aQ(xA?C8^VhpL}nhGmIJ9vOTg*b1FR{DJ8nV=A+Nw{ci@_dy!F^|5c*`~EG|*W3 zoti#0UbfZPVbFQ2v1ayhDk|m21qhMYh;Wa0Z0hjNDNDf}KAPq>o}05heqPwah?U$L zRU?bPi2cr2`?8-uPAh5L?E8tuuBlgMI(brB#r9c!{E#O?<_4he=7*Sf8X-M&r>7K1 zy#d||UaH?oXLNkrcB1(swxtI~*e)b~ew6nCA4rOfJ{PQ(H7QhDKy3JJ5a99g+9>+^{T*QZLpu*_bAbkNS6pDt+-f?yv$ z@kpQe7+8WX$qOCSv)GnTCsjPW!-s+CCCa0$y+Sq`+z4`=ZiJW#+7g4SZ43+ZIZ6{W zW_bG|^+?fh`BtE2=HfB-Eo#hQe)Rw!gIcd^!VNqp<#M*X?6LXuX$cvh>oK6vKQin9NAW| zrfYkUy9Bl}cg=B^5g>Ys0jJUUPBW7qkZW2QcKQAR8?$mG=eaVQ;yR(-lt^f=FFT zH%>DxJzE0!AJ+lsJ?Dgsv3ZmC6i{0Z#k$s zjT7@>T}4eXtLTVp*Y3WShKO5C!sf?3wpra-Bn1##G^T0hIUIP!1Zta2!!7i(Fco*^`j zkcH(wLBS&e6gI3V6sqd0utI=9rJWhI1M)^!BysRM&LxDl$@^`c!0kdqlW&{aO)C*^ zR%gQUWD6Xp*xE5h_`;GDXq2WsPALnuv=r=T&@A&B)qb|Zu1?pyz>b_6T_mTpF5+{M zGbUwmxGlEDKc}OlYN0W&b0F#p84-k$k~WgDGtMBnK+;!4V$z04w&7iCeBp8HxM=$PuY)|$fxTxZIFP9?P1euP ziPLr?woe0s&#~*Qlhq93+v`iTfJ>KBcF3f; zwNm=&gl`imWZX@>H8!q|hC9RAJ@Ey{irR=}0ZZlO8A$ll)$T~~b(cz1_xA-sO1i^_};43t}<^sL2bBmZz?~duE_`zOTQmp?G zdN z^XD5`n@u85d0dC6nYpAguWSMVK5L+yX^gdahZr2#oFkY6J{O#fxf}K|3f*aP9YSi= zdjv$}B#ou(?_nxMzh-yHL&V{q9)CiYKrs25T8L4`Cs!GCyR+BondwVe#SMs_}%EW7BmKG$JeOgq! z=d4*gVx-gDmV{hAA`4Lkl0CQe$2IywGbgAU=R^dJRyG7z{O;fgcR)|ggh%Q%)VU|F zwQlm7jbd2w1$GN>t03XQ4<)eDg|9tdPD|#BeO#FvGRBWL;CdACJr|RdcoxHa|HE(?YVzSB=zvCa7Km)BF{n7LCt3WO zCv?a8F`rb^4Y|_qMqWy66l&IKTuv7!c%Ts2mSZ2J_1*>heA>;s;|Vcvn&1b`J@49) zwomvK;YTjV$+T^s>w$ubqPdxy%64|SarM@6s5{T|SLgB!p?GWqZF-zV)#9#9t-E*V z<$R1w^mOSU>U-(jinghkP)eCzT28EY@UARkQM&Vb&Aa$!y3$~^n}YE#u!y49^t>|}i;*hHir3Quj*OM;;~AH~-FgB{~*-(DJb@eQ0vA9)4% zXREGNqFYA69;xd8C}^ZHiJECAzUwqa%i&!*|Fg~Mc;mx8cDSV1%pF6iB$cdMn!NTx znO2DzDc9!288|fw3u|JfWDJMTt24WeOiBpWAPwo<)wS$Id5SNw^>|53<3sh&=9bcs zVuSnDQFqt=YPvqZ+V;RsW#dd%7oFlo*$H=yn;dKtluobkbdHnz&~lxI$}p5;0I>_{ z!oBn(uxB#DM7Lnr_pF|^X+D2{k+ub1hXe15Jtr4ibzA?(UmR^bjRi1%^5dce2HLAb z%#8nlyxu$ZzMrF+w{Jt70axQP4^w+%s+Q zl8rFA>&JOv-G0qST%cm!dsTXs(p9m=&z2B9A`Qz%mv8HDUfV6zH-(i^b;PEFj_)9l z;r`o)Xs7Up7!s6P7=>wbiMjv)ddYXsg!_oAZRmqP+JrPI%%7XmtqdUL{gv1OLJdd~ zv#PBDLFQ-5d7tKNG-&^5@0I|KJ3mu11~erpN1&wm4{}#pO5gcBRPE5O?2T`mCXCGj zB$9k&9{3-q5lCK(%+3KC!U3UWND&Y)c2|x_{?t9-o1kgu{eQuMpQ*JDh2n#|xbF5_ z-x{Rsl#ZyQd^)s0Zx?0?){kum_bfFq8icvhgQQqpcw%Z`8#uu8^n-E1*iNY0)Pfk;w#C6fs#4T zR_7({vk{nbfP1t9Vu=YWTMPv%ICC<=8XT>35uh!~Ee#UCMX&+YZkrnBY6qTX|J#&U zD9c<)u$30H8oj4V-up&c3Oe#(TQ%!9I`Z@gZMG@RKn46X#{qE(uzaXt$^~j*=J#@yKLr-vt?Y2|x|NTKgqHY4`{?a!GyqQ7TG{9JM1>nj`;!V!|#Y5#? zLBYZbr%MfDfAf$2Pt2Pkk}3<#R}eVtO~DUqsr_-<<6}+9H(c5O06@4Da7fps^)K-4 z36r!n6!KyX1-mqzyxsE$IE1cnI9w_@R{IC6M*Bwt7vSp&?eXY_Ou$ATbY|wDv`_90 z)JwskYEJh5>q`W)8Var}bz0!`S%4bu3(|w0G5}N>>HOB%$t|E#KMkI~fkFKB!6LDs zP##Sd!~71;1n?+W0HX9f_+J>J(gnJUOx|B97ishd2<`sO&;ZzzD<~i_`u9|W{jLkv zW>$J7rL7HY;9`CybvC6TUT`m-e6BxRQYoj`{9*#mWu2qUA{&jjis#nH?!gymb2Il# zv{}iPj{H6QSin25o1tJgm#B%<1MQb)ppR|SU1zg5A_Ru5wdFQq+bWTnr%e7ph4VHQjlm?O&<pYs(O6i8g_meW5!blRH=yp4%%ZWI}15Q|HK z@}E2q3iee+12ylMscydphF5w+tl`txJV_qJz5gD0@BBGy^gkgnICiS9#q4HqRBZE2M>SyQ}#h8Ea*)8Pa1Y3NclLqgP!mK`$m&3YdQH?$1K&5t#`_wJ87|?UmUP2eCsP*L zrL~4}!M>{lxASZTFJiS6F$u+q)%{6b{&VV3B6B|RiXFrzdYCio3OD+A7WyHFOns5= z?Z})DnocQY>6wp+tTdBHUALRdN7MiHAHHz>2*-&Nx??(qh7*mwxH2hmKtr*#aep>) z5h^=%iF>ogkhCyCD_^pq*|UMaHY&f4mMxq2I~gV@VY%~AUV5kDeTTKh;a)B zHg=?%&t}mHn8?7ExpmX!^|EaxtJl}IePElD+eHCw@2%w}cjp4!=Nj0T*J{2<*o;VD z-TAS$xN>TGGoP%#a8@(nd7rBBa=XUHSxb3dB*C6^qom(8Y#X2YGND>b1Y0bO{h=N=Gg;GSK#~S<;hhV4PJEC?}fbQ*e z^afJZ5xG9eSGM`}wvd=ubC`KivpOWO`4K-t)?Q4mt>yxXlGii1P7nFrJU1(e2U06{ z4AO%J*3a@Ah5+WB|>OXi)4w!~Y*`f3B@Mbi9PP)NHPUh_xT*rGorjCaXirqaF z%(u;AlDBzLDat%?>D*>0%yr1O=Ev;g>FbG$_vBR30#nTkTv>#c{2q_ajDpVVg42p} z18H#SGa02@54YF)oi)7>nQ_P&S%1$38l;r9qDD-sIxlF*Fms!Is1e^I-tMuw`SGSH zx5ut=%-t7ihvH?8OazL?e#}QH)IEX^us#1+@{Zww>PNwt>hd;>q5=)a(pM>t{OQtJJepWeTg8<(DQj z+&6JL%cMxWjNm%gL~`m*#%`J8r;{S4XYHKrn=5tDbcy~0;^*ZGVS{F&DCvG($JDF5 zk=-w*iCH8SWgnJ?8X#&6hYuT*oCZ^bZHHN)1+IfUvRg4voOZvGR=TdsO+;57a+)6M zhtD)up2k2@diuK@R(afW;|6Ux%8E1)+okrlS)Yb|IZu!>9Sh=k+9TXA^cWNskuq$h zInx|n`pj?fNc;zvLyRAC`bO>ZX~|zi?$ahINBNC&N2Ri7o3}DAQQ=>R&LGOZ-Cf?C z=qt=|QOx0e^rRMtO^I(}yww-DS?g+Vf5IWwYaW+!d`BOsXK_V;9Aq~Sb8PnJ#5yCG z<5nVA+`k_s&2Q*UX(_0SkmZfsTs%IGp#^P88F9qfRDXsXE$-?s_GRwY{=A;LTZ{FQ zbDx>|`CO{>3_1!8%rN|(n;KsfHt$v|?0kBIau@RG;3jh?oy{1vo*x;959Oy$D9-hz zcf{P%bzQTpF|ugic{QP)Ezm2<)Ft516xQdg`}r=^W=`#9TXY4mVhRLrlEwtI9X z$V7eIZb~-`ZBl@VGcfPZ)NqO=wyqi*p>)GQ&w9?=PpTMQe7dQ@MU0H^_rG;|>g71To-!oq*j`RQUJFKQdaGc8wBG2b&CTtcb`j}pZ z4?e^6gRo?6IwNO!N9EL{H=Ni~<1f|vUwtf9!)a9i7-6>~n6Q(stgvGkgF+S>!zZ=# z4mIsEZf!@-I6quq+Q@i82nRKh4+XB?iPfg5rPUq=GaD`^`Zskkhn#m4x8)4dD}~zr zu3C9}&REZ_Kf<}w@evwm^ym48_k3{kT1)}hLO zEy=?oKqGB;8_)!ko-!IKc=s3h67_`zpZ%Dr@UzgxUxiKbqog-32{j8gZuvKIZJRY_ z3t!by^`y};Tto?S5UjlFfJ*ur2mNi$`D5~1jHB{b8n!<}oCxAc;dr_f`KZi^nH&O< z{)^9aC7`>00a)8E)E%?P$b`d*V{Na`20;`%#>V3^i2Ws&SmVlz!cn@zQ86bJ(K(3t zu{ArvJ9#h20gP^tZ`w1y&wXb--nSPj|J@T>Wjr=XBbbZSd%e--hO9dBtjTeJT7*`gF^FS*q`H)N0T0vgx_4p8$Z_t~ zFRYx4-A{UkOP3fNA|IPL*RH?%XT8#~^-km53?1a+99TO3uA0HzEWySFMpE*&HXLu$ zDN$cpc_% zRswuY-tdXawwdg>peJ=Z%7#=WW3Id zdV6XeB1$AmHtY!!qm2y3H0Fauke$gwWXNvVIp{!s7U+q943b#$nUeJJJ)$`Q+SmZ- z@feJi#G%jwkjd+m_j2;t|JUPSSW^P@A9|D$$DhiYR%w)6yNY5R^fPt0F!$n=07n*4 z8=gN9X<>*1hs|%i=llbF;^U(+W7!vlsd1y`{OkY3I4I-du&;~get;eUNf|H;t3rFa zGHgnFnn2!XC={kVmSmZI{D6u^9i%#6Y(@jZR0}!EM?j&5N4ccGICZzOp#BC3ca^u3MrwboT8zF$s zSBBd8R*Uu5m(T$2=iuOYjj8SE?U@)=JAY1Yl@oQn#-)IK4Kc?gql}J@2i$N_G?KJ2 zcV6^SYUk}pIC*gQ3`w^t;;CWoJ$JGXK0HeyB0NiN0-d|+5tolVV`?>D0rp*1jj=M5 zVizq0{`>J9_&){VN**+5TnGhG8>~xHGU>72YcFmXpmRq8TML7{m*bptGqBIglWptU znOdpOg-I@Mt25ovS1f%&^u`r=1YrsCTg#goVZ#d39siuv@Fo6axqnS@pc^5&p`)mPLz=_1Rj8CHshblNHN7tg!> zGchMzftw0&-$3Yzc1nH8Gl=;{mbkAfo-d={C@FwFNd5k!9oD&;L8ddG%RB zock2!*+UCLN4?&^6Aq+?Mx$f7(wJ;0zHTRB08n))joW4(>!X?NRXMK%c;tkW)gT8) zG~N@d1oh*I_u`GspPv6%25r~vM_NH@o;e?t0)plULnG$lu;1 zcLKkaS~VCID=kn~hDXzJ61EoorBQa9|*(!1yv5s<)c-Qyk7#zZNXk3F8Md zarsN{*ahnbN^OK?PWoXG!P~|2qLLfl2TNLg>`ZdZ%K9K2`i2kay17MXV7_HNb5FZ2zZ@_FcfXPV{qk7P%nsKvQ-zXs znayl>ccFvK!tu}&CrsGi{3ah1J9E`7itpv?VU#GQFyFa`mOB=IUs5p;tLLD3?AW4ms#Zb10K#>7BCBh7@QF=f0eAzn@|2rn#U2<5WO%gO zFM(orLC4(yFaP15Q>NdljGR0fQO8(g@@y&Abr#gV&@Z<9+=ZmyniF>!lJvYDGPiPAYq_rb#$+nq#rhL4N9!Yh?umw(SIDl9gu=lZtkYbS?zUj>KB8hb`K5HA z{HW_DsmS)fx5wPqzWemcNxkake`_Z=#B7+;UG1uGDaTc05Hq8G1+!B4?RSEJ*=g6h1gdJYhAyc^tI9XX*r%N%ov}iFwxp0OipQGNXIt}f zoO%%Fxrd#pDTnDfvF4gdD_w8x`%8*16~Aw`WN2rnh9#7!V?8shdGWpd^fPw{vfJE& zRbT;7GNjEEn9Q;#cx?B<+QExb$N6*(FdEDjDeSrttX37-ykC#S9v`#rw2GSK1sEWx z#SU(N5QAU3Y56&*sjJ$}xeW79SFMuGKtz-f?Mw)#<89>U`%7c`d3x9uX}sAL+_${Q zkhJX;3SkKNljSJ0$lQ#9l^4&v8cgXC)k>F7?d!+7E{JfjlU3%&F6bo-@(9ir z8*4Q{4J>=8! zsZ)HUw!`?s*4Cc?@}4llAt&#Dc(h^-yk#(mYBoEZn4&&8Z#123mE$qf%}qa}Fbevg zauDV&n6h@0Jui@nJJ_#1f!^ei#0LihQ@og)w9a}dT%jL*iLH{~`FwxQ5Q zwxN_)B~w6#Y<6c^GA?$%+(AtMnD|DrU>ZFo*aBkA&4BGZ?+q$8tg_xh2Y7lCh#IAl zg#(Tk4yqG>x(5JpH4e}O4I)1l5cxT!g$Vu%-av%{MoaV8{KnS+--EBC1>u}D73wAj zrHI2xXSm1f90Gcho$Ty?NWyIi-7_x(co6%;UsC0idrSbe%|rc2U7+5*uXV?l2}&Xl zNNzp*;sD=IFg(aO;;P&=DM4Yq??L+vpe{kZ1 zG%ODMeo1bx{Rpg=*aZ%T4n?4|)h^1ep78R_-jHd7QN45o7(P*XOE45X?bfCk$7w38 zTNus92%U?%JN1%Dv>Cjc#MDELn}ql7n4Rfr_py0dhAqk?OdhYPuWx&Mj2{GeDH%EC zCD;#O?`kXVZsl_=7XptA2YKaxB1Uw#vP@V4rqERetMGYP|4wcG$vY#xIAW~lIe zG$q@sWP5uU9o>E$6jko6G&6NsWkVb9ll$%ZOK{Pk&<|eC=8j|ET7X~SF?U`n%H23o z8Y4_TYyk;^b{d_OyDgvqlu?e{6ooTkfo0L%Ub`Zcnd^5t5Xl*QluBIqek>uG;dgNi zRHE4?T9f@io7UWbZ>Iadc43``cDa>@JEZgW6#1K9fhC~v_O`ypS*72y5I`#cl+3aO zi+`p!z|k3`u{0VNz#LkHS?uM1d+T?IVv4M|>Pwal{#}<>0&~vL z4m?Lp@XRJZH|k!Rro^X94P#k8rLnhn_x@NVfJJ_&QjMZ^FyckE_dh@=vVtppHYM-( zo>`-{VRilT;Z$J1x ziX`pNL)g;Hy-qMBQA8{JKUwU*y}-Kw3El-WWNOJjZ~>)+N^maog-7&1&&7%;0cF!> zHgMz{tKj`U3$TWtfy2C~ugr1$@vim)o*r6zvl28-Qvli`Zh#@@T0G=6_FEmZ7<>{l z^?H?wctfB8QeIKD^# literal 0 HcmV?d00001 diff --git a/test/image/baselines/quiver_zero-vectors.png b/test/image/baselines/quiver_zero-vectors.png new file mode 100644 index 0000000000000000000000000000000000000000..8940c9cfd983a0f8bcb4851783e23accfd81ebb6 GIT binary patch literal 15459 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 K-6@qd3;KT?7gGiR literal 0 HcmV?d00001 From 7d2175eaf8c915a68a502a10a4810c84f9f7f145 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 18 Nov 2025 19:59:20 -0800 Subject: [PATCH 13/18] Copy baseline images from ci --- test/image/baselines/quiver_anchor.png | Bin 27191 -> 26453 bytes test/image/baselines/quiver_arrow-styling.png | Bin 21011 -> 22306 bytes test/image/baselines/quiver_categorical.png | Bin 18372 -> 14784 bytes test/image/baselines/quiver_colorscale.png | Bin 17077 -> 17292 bytes .../baselines/quiver_custom-colorscale.png | Bin 21670 -> 21053 bytes test/image/baselines/quiver_simple.png | Bin 13170 -> 13934 bytes test/image/baselines/quiver_sizemode.png | Bin 25138 -> 28492 bytes test/image/baselines/quiver_wind.png | Bin 32081 -> 32997 bytes test/image/baselines/quiver_zero-vectors.png | Bin 15459 -> 14882 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/quiver_anchor.png b/test/image/baselines/quiver_anchor.png index f01dfb83745b4ed2b64907284603238d855eb946..463f0fb85dfaf6f6b16f0edc8dba648db3e7567d 100644 GIT binary patch literal 26453 zcmeFaWmuJM*Dfk3G6jT*w3HJB1StuThDl0yhajzhNC^n2OhV}rkdkhYE&&CR?ru>) zLO{AWuro?kmPP$2rb1c&(x&a~0=0&V>sXuHKiG zRJ(BDBI?2gj4;?`@Xqer!sH7VZd|x8DX#I%Xf+W#mUO84g{V6b>7^@lQpl*n*Z?e5 zNmGvZYMmsk?_XiQ;lWVl#AJ~pd?}e9a3j@JT!qKxTJ#G^hLlm2s8j=@^gWm4^(SYx z$F+i`f?LU3Js-D(jsj{eyZN`04lEWD)iXy^B>eHOP+q!m0Rtv>0Tce>0{Wj{Ld5Q% zI9+VJF(m%$P3UvZOK_yprGNh_c=ry&3;5TvS^mfW@jeXk^ZauEy7J4|Yhtj6L3rVUB;l(F-w!D>qPgY@gv%{%cg{mqE7j|9!AxH!?558)NSZ`Ct9pLx^2K%u)S$ zpua`{SI2~zC{QLf`Tc!lFW^t{|N73Ks|PS+pg1$H_L%&~6o|q2vHx?rqAnoG2mF41 zK>U4VH&6)||C-W2S2vZrfC#c~avc4S_u7p!6IYPC2P)yU-9~quQABQHjLzHD>Eu3kPoQ)HTk`WzqGqP z!@+IY9fgHU+WPV$_T2uD&={|i!}~kSLsR*j<*$Il&eyM0O7c3i)~$FP7saZp_Kwe< z-ScQSn#;WXOB4+4oGW4HH- z1Dx_CN-W=(vyV|gBSSe^#0_WmgGrOw>UepoM1KhX0(teUA7v+;>@G~~lOd+#&+cgZ z`h&0Ar={ShcGq-DErR1J`bsU8*YfP{5|+QZaLE)P72-RNWSc~d!XCS^2R?^s5{7FH zXI^n!<~WX#rtlk7rta7F*S*hfU%ZURDU51394hMHx{=L$iB93$$=(c~zgB@o*m4`bo?4C%`m8bsx;VQ z!BFvdjE>~CR@C?Az=?c6BJ-650b!=^yJ6+dD_Y!m$C>eV5$ejqL$51(<+9V4d$)B< zE%?=$;z`EJtRppY)S4|w5|}-<7P=zB!x7DINE|bja&iN{u9R61bQ+w3&61fr`n;o$ ztU)iU_+g8HDs6mpFMpCdN8c9r+5|wLlF4^ivwqi+FV9)21-%+K4}S|=6d$~!N8Ai<8&%8lkN@%WNb5iH!_=exX73TU|HU43ypqo zi*iixJ|@BmA&?`X1JL13WH#BS`;mQme;{N83mVF z0B)rQH!q5&u}SeIoDQXQi6I)6cmWwJ33KLuYpr;T7o5$%r;Tt_HFjPrc;B~3l^-$=SCi@Pgl2>2| zWB~j!;r+RAB`^(6HU&bDUlrm|^P*Hp^J4wqSgrCeRch|MgxUF< zu$S`)`4je~pUK|rS&1%sFLTcJTSVJ6wG9~*5hV;Uua=*qC7J^!uCmScPr8nVDI-%nx53c@YI#Is-!8I`?v`qU0p|p*-yvd}@JK zx1Whjkxa^@B+VDG@nxI*t_B}Rv+8pBUs@QFr~)U^Z862)tm_@G#o6t`s>bb`%b7O3l=*z~ph@TpnAK_<3c0Y|j$_+YDRX1vUrzH-VXek==Y`ORT{`?lTH zi43DU_XXFQP&>VztR#0imtUiZ7HZdo?bQiwo8f%x)8PVrzNP89T7`E!_aQ6pI_0cg zCFZ#h0zbU8VEPojbcR8l3C>9L?l`$81@^(mZZ#C=@xCU;(e8x3<2Jldr?@fTz1_*t z9$%AW5C2apWn?x7k5-|9wO_Q|c-eisj~mi%yJMCaPv_g?OxYR{!zzaD~fe@Ya?fiM%Is>Sm?ux)BBc({#dC85%dq5aC^&rT&b-$D<#_ z*FJ73Q3$%^hkqgvJyyw7PPW?|I-V$hWND^0V3ky83rl&#rWSCBUR<4kPxm+2(Hkc7 z-Xe}Jm4tNZr#=bDYOtD#9gMQY!7XM^ma>xH%0;upO*j3jdu8+!KJCy#-Cyf!&p(SI z>O3VgbP6xCn;IwH7-={i+9t)P5z<+!+cT>E_6j#$Gf#`(rsyca`}835r&=X}$o{8o zoMjP?hU1dsO&ic_bjdkyi)CQW|#i;U_NILuQmxg5w3R?~!E zYUXO(akEgKsrU5YKiM7#hIhyF^$a#OUqv_-Yd#;og5KcC;tvu0U?_AbQp_T_6#C?X z3BB@wEHS>)W+=B4k*1!d6m3}R5@%Eg&_wHxP*HXnTF){|ghufIBGY!Fg13BNS}<`W z2HyDVcBBOvGP*I4qh6<5U?rbQCc2i1>qw;3vghviIAekooT5BRSIHCcD(;n!HIod)NXVct4BNyQZl{HcaBY!j+LXJhdw|{kLW#KKzS0HseC!qBqjypbZI+${dSt6#a=rY2uhp*K zm5|U}04DurnoQ_ha1`W&uk+4DsVm))V6Vfc7-}|g8d5&tk^1p9SZZqok$|-WU!EKT zBUGC9+%qf<2K&F z=dYpaC{9bt;%o&{f(3Y{%&}TWBjJNqtJy04^79!~@-^#k|I5Zf*3-z685v8nAj z8~`g7U)JvV!OjVjgbDNbdlAWLn>{2N`{-7B@HILwucx^nn4Ig~(D!Y4zXW;Ze(1^u z9g5KE&+Q4!++jKDBG~>WNff>GQlV)Yb1%>apM@@%%YY6zn8EA5 z`MBs$eesfr*U-Mk1m|KQObP*6aUIkJ(~+{9FW{NxrSthb=r68ebDh7oh!L@J|J*GI%Srv^AIkmE8)y9W5CF<; zfBe+DoKJi+&*=v;6(hsxWyW)Q&tl%d^_rDujQ~0V-(Td_`;~#dXRp!m0W$@9kfMY{ z2II|vWF1V&&*?l5x9`NQP1osb6&bOC9fwmGhMYseNinb2rYBuMKT1xhU<1Rs&*iiE zl`eyRgq`B7?|Utxr>X!dGXCY4id$%I1J{=xL@lUQzyBTAZPu489qEf>@ujOfQE>h% zrF|4YhdTl7HsfuPOdW68^wT9@U+d4)=CJNd^=*5&&>8o%^G-|a;m(RVc&5w*T=uF@ za{vkAm(Exwdop4Z&_wCm*J(nYO54D}_n`7^QC%$fq+-%#!j^v*3MYs;j11W8w$+vf zb0QBW@^wqopC4>)0`uJ7pCNDFpMGDh)@60DX-9=lLRwhtsqhu_GZxA)OGrCbhD`_L zY2Su0-$M=mYk73|y_s6?T*TobeQRx4*LcHz07%*h%7;+M!& zh@)#b=(0Bh-uUU!YGucOvM8GjwX;SDj_qVs-!?mq>!d?wi^K9@4kK-s@?P9MhtwtK z!AJI$c2jfBWX4fy8FFp=8$U9fmiqev=BGz_?5*))<_e=$Cn{s&?dx@Se~mr7RBAs{ z-=D9`4FzJ%#%C3eM%W=}Y2ZAh*wM>QLwN<$w4=M?spv zL}?#pLP~(@HGROyd>y?T1n=mE!E>JrZ+sz&i>4HLUIqD~{#?yGq1zw5&%EfZ>_2Y! z5jH{|G|7EAr*oSHB_LC5(ex9Q1}OI-n`+8x&|n-;wQG?>j#uYn`cxk4-n zW5c#A{EoKPWkiu!S7w1zurp&Vwhm3&C0%xWva9HCS-(5}D3edQa=s&`W3t*Y7@n(= ztHW3kZ&!04a;)46JIi@RZ{4;Qs2zT@pbn3|+zM%-@lXg6J$+_9QBmOZYxGWwh@Kz* z)uEIu7L=aRf!z6xyy9ZKXu^*dtp)M%%1=NbJ^=6V_IK!!Z6f_BH&#l^lfMP)-% zN}*>T3|z*{`Q2g8_^CLfzya7StSoUVB@O_$^#wjSiPXtbqNaZ*EYO{q~VVVXbTlR z)iLruai-w52+9##<3|acDf^p(;H>|66}XbOz%8)*e_EPs1QBd}O0s#!Ti&gUJ2OV$ zt_2!75t9H;Sm4h>@D3m<3w)E^bvPqRCAq=*Gi9RXC~!cX{3vZBw~PdjwdzcN$aknfb1IU3Yuzhh- zlzP0{v>B(=J-cu_?s2p#wcg=pY}(k0eofJt=Ua+>Gv;KSX2K}3mh%T{6M< z8qJs}g;C77;y5KB_A0v|yhw+>5S~Eps~!UMcfb8$38FfGlfI;Nz#PQk9R)v%?a(82 z$0H4FL)-r{@)sg+&f_bYPhmXQfP;kb(4!B|f4_%f-E@k(fLwgK@+_b7{H*#kn{uI_ zn(gxY&{XvBw+T6KvJtE{2L@G2tncpYZa9*(X44S0_EB#*W54)$7w!kXpW2V7Tgk%6HG`M}wYKI%w^ z(y##l6$!q^6r3dPbGfZO`gVp+vFXA(GhR}gJsOdoy}B?pL@-e6viO` zR<zkrv$v%q>)oL5q$xMm_>g zi#Ny&p1k~cc6!8R-G4JjCFPYyzK$vsvX$EmMUWXi6NhZ+fa54I!PT4Xw-wp^@hD7p zHD3cun5B>`A}q67p8vn_u=gET%SW#B?E{KOks6R(rpwtAA=HAMUdf)jam-sFdIii&k1>zc*lQ-u(;!EDL8`^{vgQpU?PaBtj zNTY$X{DzF|@=zXAFeRTfOqjDYTJoaiMdORN)&NO2kq&62`?O#CgS-CldR%+~0CLYW zqbet#1_n`ZO9OW2*CYZ0nuES7w8J2}WP(Bf0+GFGkD>&(g}8;!Oh=g`nP7PB07}do zB-j8F2rO_J(K{B0qK4C&pzFNt0h8c|4D|F(t?%V}75S!aJ{ry^^gKA~71a+SShtO4vJAjaZGO5)(5h>h7(FJjU)gY?xX_*W$cTM?reWsSM1!|? zX%SA!+pO=;CP8qA@c?Y31q#WtT|hOEJ3I$?TTx(jwHCyn8Gy=L7|-Hpbl+YyNq0Wp z-%zV@vR)c1%{rI>2Dz(vNd!1`K8}Jt$fc_n1%gnWo1;EdVENV-U$jXqat1N%hUt&TN;X^RL+74Vrz7t@os-ScEnOf)-h00P zr22OwZU)#NjLE>|bjyxk<(qtvF7L6VF^Ds+!Km3g{p?4u0%FiI^h?Jg247TR`gpF1>Cf~ESSL5p4I^hwL7Jvt6C=jnwnl4Ip4)v-zkR~sE-M3AYhkwA_dMVb4A15W-KHtp zI=vRZ+rBh-i+U|?6#Ug8aqFmO6a^d~Ar!)YcDywYFv?x;j=K5s zP$LdOmtV0DX{ifyB_x~|b8u3I#XWBNfDoUSC-O>4Qg#KOu){W+KR!XwQKoq6%QaI1 z)!Yeb4krN@b@`aTv;eLxyT5g9L*Fl}gu$0}JgK!(3F6#my?!RTc7DK5j0vj>$f}{f zHlG8>C+8GP^4!(c*L;#|Q0G!ZccJ2QRU`7}!X@X`!2>q;ofV%;H>n`wIIR zyZ*&^XHOk@yquCT#>4kn_CKAgbSL@hT$bx3d#>KSBXQZV%C1_)pR?N^a0PKRT+|D3 zo&zy;EXe9meX0BYw!qBX<#uyHJpcU}Thac3sVW7Dlp(I9F>-!d16EYMaGn2PE;4jK zKBP(wW8hJA_lP=Th~IO}m-C3}<~3wCU7jewPJI(GtwMXLT(3RLyaYOpJgA6-Q>#5- zyo^P)Yc*o=7ZBSox#Qr=_f0$oBA$f7sqRubGkysIZqY z_<$n;V8&Cyw-@|~1nEgW;3n-bbB$vlmF0%l_y_~3YMl$a&Ihq+uOnOTIdx<5r9h2U ztU>-)heBzN%iB_W0K8d|M(Bb~Uyrc@$=(WH+K`i<{KLCV~5h%z{1v?CYc@I$nK1eB7cA}ytjA)^cIHDM!nsprXm>uWO(#rrGWb2S0s5a1u1vSBIgq-plM&ZF9P6rD7A0DuM);;jk~ zPOEzQ6y`m1T^%3tRWXn5dtC4WZt+cUX&UpjAfBJhG(rHS3<&mQhed|pCWowFU?ye0oZAm@ ziZ4K5rUvduF2dXe1#ppxPqyKiJb28k%>Wb4n2v=P@!ZhD5(CAam$@gV4adhPL(3>t8J10KHa@`4cdy-*ogk&Z*Bwvp=gJ zpl>MbA2(Xt z7ezrv{qaPFA{Q6en}iq(xJDgjPEd~m6b0#5JPrpj*3o3-9Q;W#2qV2HNp#McZ(Ka0 zl`H4qoyISTC2S2@<#PB~cf7P=u<94mn#?e%wF+23ZvXce4&BsX z?=%1B(`m`SCQ3BB-5*tG2vpxs*(xcgM_L66&1b#>NmZP7L=2Q=g_*R9lZx%458q|D zEORT}l<$*SUuyFoGJ#z8d8=xZ2Wt!BqjG;W#MlFULTVif%5H-I<|wmB_?5iJc1$qs zDZS&&f;Y|W@>-Y8#F$lTIC6qb?7##F6r0lHQ$L>DSJe+BDdgw&6)wg+$vfq%!tkr^ zE1M(ywszLrZ1Ul?{yy$DNP;k4{z&mKf@rkLuBJgFiqnbaRD?TNZ9 zu^yHCGeP&pl(E-=)Lq;0sJKE9pMmgW33E^X=vcnwc`t0N!F+|#TECumLVXO2)D(e% zw89XO$_xV2#x*!gfL{gwIBlI|GJe zhw+v>);Sm8PUV|;5gj+1$mnt&$cV$DB~2aTerdE1i72@g7}|Sja-~HKu6srjHknO; zxGnz2NKLi^AgV)Tb0svi@oJRseysj>nIMx?FkW{ zVgl6vj5O9C{vNaGi#z7Ismqh}Pxby>0ZdYA{cG9p-msWALNb)Da^fj>4KGP1)3ca%OJ%!809KRQDjJ z7>iKOr{Pb2`aRkuEqZ}Gb=pmoK#=2XbE1O%1L@MQae1N3a><8@$ki$Nitm=y zw51EB`~ZFF^Hpv0)|C`GgZ`Y_rK|bQw%8I*Q$aCZ-nfUyO{XVE^DVUAQ6Pu#x|?=T zS=oxi#Au?Q=7h`qLz_g?d~KU@TOscX4r_}V_YpfOVmmm9x<3Hy4C&x#ZB6u6|2I0U z+)tIL@mF$6ucpX|kmy7yaUsz40G^tj_t9_^U>4mX#7Vjm9}UM%BUc$7SATmFYEokl zGpVV(vC|U@l&~+iE~0s$y^H6WiM<~@Z;;t7=@J6L?-M;U%bt5wJooBIOiJ$!gj=jr zXiy9)>)ovPiS15~YxS(4LoE?D43hF6^)z%JH9n%fKjnY5dKy%v3Df4vp@=E!T!)>_%#s|X_EUV5A=46 zm3r`RnyuH5wC|#)hk$4lC~<@U*v9F$@De~%De!I+{mus#0ARLd^}vv+Z?k@ZUdqsZ%KWnBq7~*cWqe; z^ebIT645g!r0^{x#wY?v3EI}CYBP)*ykIGj+WD-^*=iYYns^lqhwj=>vrRu-rQCVC;3#;dJ6b;^$ZO zCX131mkqA?1zpCA`jtQj*GJ25%-f@w?B7i{d+;aKH!N2do?+lBq}sX0m4SIv&0ta?0I;m>8tROTw7ln5s}p&UtBXu{U(_L7zesqQ^_ zz^F%El1dPM^*T@MOOMeHCM7PbdSeaV4OEVucb+y~<&y=Bj)cv%v$6AaixdMH^)5IM z2s9d!(rpN+@5&O)nv6S;Aw8EsHfa3eVk4<5*ucImQ=&R|8#XF_>6GwPfW@kT#|ZkLMwVT}!#vH{{Z{E9*=RWCZnNLyk=gnU1iX z>uG85?;lrZN;I|3mMF%yIvAOCQ&Gnjzp2%@($o^dV~=FVO3VwmZ>eW0v==2NdmZKo zZFO>QE~bUP^T-bw?t2u|WqYtWZ!z@(o95Xk3*P*gx{o6_4y=dsGHJ|1is&1byyFLt zlk*BjIxMgZUTcySlHHwnS>nS4R{8na$(|HhGC7x-EaOm;u*Vw_*}IQNIgR^k9yEho zpWU>@+IacxeXWhShgnLAW@s)T!0kiHhRTo9Hnj)?tZcycF~<~7VrQ++zJiZ?xupea z@2t;=4kN1;Hmo;SC5Yx@X+}Ey{F&m^GbA(KsGSu~WGIEMs9z&vC;bjl16=C-p{isq zlpqB|$l>`pHy$TtHHMD`1*DHWf$Gg}`h7?2V>K3uzjUg;Jh0jv^?CY>w(t#G#Fs!R zGP5B37o$mjDb&v%`~C*Wz3`16E%8YrQ}|T(ZfF~OmIDsgkVPv$mgC94^ldCuA&A8{b`*CnxoRNc z!Tzj&7iIfj5;`g}!*UgEIz>E+p~^TQ^x@eatR0@URW=z<~R;oq~L!V6+%bx^~ z%$wgInKi}x(=s~W9{GJKhwtdhShZQs^O?GJ!rI|;Ojs3Fq(9-ZqpsyOiFyKf)6}iY z&R+G8xUz$3z^OR3e*KlU9uc8>-;07*{O-qnz5EPdO2-(&U$Mdi3g9e{JSB3PG`&s_ zEFIPR*Wtt2s!g57y}l2fs#-T%XgTPmgTep+j7=gv@d%|6#-Y-B*IscRDl%cX!_?id z1WNKf<11U2nUy=V)4oz~wAfTm-x#v5`+V$m@&TL6gXSsI<0r17Ij;JA%$od7YoF8K zZ&zJOnbsHG|K>wQ&+k;Y0Z4jvvD$BR-&s-B4cxIOr9{TlcQl5(p7B?x1;9zE1k+`W zF^fqXw{0sDc+uJR-V>{k4*#VQk+TR^S{|g+2KkhnR_?8%O1qB7?|)WFSAEk1>+5hhm&Gx%DDvR!5NPhpRW-NFdaSf zl)K*i5(!6QUw_Ghk_ME+Roi7Qbf$^Zc|&V7;`>quaz5 zGuO|Kiug~@elqv8dY=igwXEA1PKdjld{DaURn~fJbaob%^8+_<`rrhPtbBJX1R1Mv zxm*+2k5l$S@Q^hmS%Zu^z|(#ZDwsRh{6+U}XHOHlr56o_ zBeqH8QkX&_;R{SY2f%xSEr%z(ed`k)ARy?D-=8P$IJ2#AIFhSiv*Syp+~z92b{!4c zu_kE(sIvK2F?iqp;B_-C2f%x$b*+;cjrQRY4*8mKDcMBOhmIQx`i^ko&jrB+0D#Yh zlOb4TFXIAWaUY00v=Y?f9{?8P^JZDZd4^64*`uA}0B@Y+%AO&9UgRL(l(W-VnbF^- zxJletaHfawe&qH{$7&)PSE|7H=d2_eau_ z7;dChsAow;8av9!yf+X2RSJg?S@}I`{E|G_Xm7Kk0lN)QN!c~`dYs@AFne}~4u@(K z(N8-sf~9jlovmlncYGctf)94gAx=gwk&G_vr1d>5$mS8#p;G*5uylZ0M-N4-(f6-N zWu8bA!5Z{oo&n|7$Du$mTWhg2)@{_dlP_Dx(^3x>8pJk=+5C0tEtGHg=SG-G6l73zVQOJmAd^UsNqb=)q zzFH)UMWH_2;>u=I)jK1^(IOx{BtVIgcuCa>9$gi;s*eXAsH3h5OTkg zn0jQ$Q?H&^---ED<1x&H<(3Br zJquDtgMu{|F0BeyZ`~p4O_VBllJ*CxzMMATF*E57Z#9vEolbgip+m78?gapQiQU(Z zI2n~fB{pjTiz*Ua!`sM%aCS`x3sM{ z7(|r_AW+N_t2ys)!A#&>Af}d91UFVjM3qRY!W(axal#Nm5#Xu+mRDD2LkXB|a|Cxs zo#3ZchzVCJS4Tt}j_FelicS%MN@*&vBK5FcD;ubR@bzoMAwTNyc zc{<)@W|V3;$fke!bX#(Gi5;bXR*n>@&rai^=1y(h8U|V-mWfLH81SfMZXz{uDRx;3 z)W!i?#SOSftA?xD;?KaA_&u7*YDtOA#@>tZvurIaUx}p2>gIr)mMXtOb0)zAplsS$ z<;c`>^egRH-rU`~6f?uy*qPV)=uz!clXefFRF2|l_=)V-g!#Pv{N9%n2kZiO{IsZ> z3a$tZSpmHajrkzDt^PhfpxckhcbI`URwZNfiFg4%aP^TqOcOU8&Dom0eKes~!%A|iM*;N3?gq({Ugx|GbU!4A6?i5bFffC;khn33Gp~Mq4=YBw@xLIpM zmq{O)J!J6AM26m*;kIUHg1QdyjyVovSS8QD!AestMw=v{@)eNqXd)bR3JCOiMc1iF z8|xgqSmZHtbADwoB18Bn{`)nd?S_W4@3bkn4kZsIVNH+S&fK!%;eHH0CRa=Z3X(R<4l3nLwpv=S?mlJ^ zy$7^PV&y>9H6Wjz7q~pi%ydN=XVUdu!z7N5IS8^{Q%pZj%ba^w)3 zxW&$$h~iYBz*C0}06T-MG$lc&2ErlH(7$8PYj5 zRWxAU#~U)tKwvYNt9e_qS#HeLska zW=E1&;Q6tkmTrM_A_!^&&V%lP*z~)zM1UHzq;kJf0n&Gtx3&jxj_%r*)A`;-aaQ6j z=h}H&Pxj~Y*mzjmqBysK+ZPi6rpAnu1Q~1hm!(HjC*6}BwY^X8X zdK&}xmu0ah8X-od8au?9dXOXPj#fBk|D3|PN--z`Gf}ze)7IjQP>9CMl!Fc22WIzy zDQmU?+STB(ylZ7L1QGaBzuLjz02V?)==spvyYgkLUF=Q`SrZmt&Nw{Acd|c;-sb7w zo`-0LH#bmrSd|^fSUC!X40vWB*kN|fENH65uK8y96~Jkdi~Q)7e(!;yz-*(0YAzN?G?q#gvbU}VlVd?RBtBU zI5AQi+zL`XJgiYZ-)<*SK;Ej_a$ki27P9hco`qZ~V-~>}v+z;U^ zj$=~OaRa$%^k9M*8DrMVfN(ko9MEBa4n@THzmjU{dGO0@zT#I*h|M6d1{7fr6iZWX9T=ueH5REWr-mF04D z)#X2IFq8QX5~l7qt}c$AE_WP~Yf^xcBY*id=oS1j!dD7tmHu4%YgE<6zqA1GMkrAE zN^pkYWp8NZzi|cORA5TEP|v2>Bcd*+*)6L(1aFK=*##9S5O0`-^pzw8DrxEWchZ0a zE4r}}$As7%Knacypd7-3xWr~I7e4;L4?g}r$u;hr=^}|7WPA=#{Csp6$^u*XLG@UR8A3HcmZ+B`Jwv1x$Yg3##iZ_9EhMaaGKVz z?xNRht(gJ5x(nYXL>8sX#)JU7;Pkkh9M{B4Emi@LVa6@LjvfTRSTwF<=_yhjKMTVITfoO=tg?nl9(c7fd^a08SllsAdBLErQA`y7e}#a zpQ}I>aU+JViHklN_ZP{j?<(LEa#Jih5bjLdkak3*?I&LDcapJp8+LCYEiJT>Kh zdEx2}0D@?}B<^XwVka>wG^nN`FbvV`Q+M8eId`~H6fn1wb$s0cuv-Jl5-&fX@29d#k(c@*hys4u#9Q<$yIN71O7cE~;5(iQ|3r7L;8Lr_%t2WpP4Ld)nfwCd^TOws^#V zS<`PCQDUB#FLd-qr{g`%a}AV=$3hkmltW@c+uS>2K=O(%e*#i^e!6`E?|q-n1b*&P zf6i#KfmiLI2my!{Q)p&DQfbb$;V7}%9#Ti&CvXG&$mZz7(6%N5Q3I7xodZGiuF*n< zBH2Lp3im}3fx{u=*1^x@9tEJjQI-P%K|0`QNaNY_7VqJj*fHl%uF3s`odgG07sJ~{ORn%FB2DDr69*|e8L@jU1a~x~5i|)N47R`M{<)Q3-ur^d( zvf>w#Q|PBYzX}-41R^Nb&@0;N7E}%aQhnrz$?5SyiOmoTw;50IRUm`{*)h5=5v0FRG0{XqDljQ> z=d9wE0?svLm;OUdkNryf8Fuh&*%S*?ps>Nwe&{crlVq=1tBTBXe+L^7R ze&6Nt8Kv{b7Q_$w5MaCXzO4!HolbXZwK6>#NIo^2e!Tpl98%UDjsc+^hpaz7bvhs} zhgVEXG0jgm;(q1oh_@FQ-S%KVtLw_Wr&@s%mPEu3Gbzw3$LX2_+&IBd()gan#~aBX?twbcQ*U}Jj>2vSb3xV?@iraRXUh^6xhPH# zVJPIO$?gOdxsC@T+I5)vk0ei3zB2wK9BVaPLkkm)Z7T1gIOThQXb- z%++W@ph3|%3Sx_~GUcT_?wIi~&4V(``_U|#YA>e`xc+1gUbe>KVy}SmRu5tC{aNf% z^5ETt+7IB{c_cdKJb_q&?N#u^K?ExZ$*@a+T9ccAT|iPpn_>u&e#ofqpIQ9@fzpNK zJ;ecU;L8_ZcXRY79sU=SS$d-xl3$(8xUUo}L=qo5et*sMj<1@dZaV@}doDPVus;Sn zHg?2~9Mn$J3l?oL+&f(@)!w4>0 zaO`dS39=u9F##3PWnvbsQph@2!BU3AaNj>cJD`iOnR5x)cDZ@d`=a#1f&Qu>X~3!Ao?01}QG* zRjq-aK$DS9&mEvl4u|rvDtAbRmC&fvkHm0ph2`Za&Mb&{=Knozu#<(VXC}SRPGri4 z=Gr1NtOqioT1=)1bbkvZq39i3`tu4hA%zELrzcRNHAk!9-A5pD;IizdqC~`5o(I%G z4Whw_1<40MIw(USj*FobC^HxZUDsH9M2_-7uLA`3At>~f10}5Kpl<`S)wMGzG)-~q zJ5%O~jBei^+ShXie)=mGfGR^b#~&4u2!F!tJST%LTzr$?|4Qt!ugZ*^%{h{%%mwXf zpmqh;z3;_CzEa+O9Gh=gJN$7-Xd(9DoFAoK*g{vl;J_#JRJ>WT{(XJm?kh5M%$;!Q zPtuwfY4zjPT(N?uZoTcq-L}@&-&HbBkxQIE+4L)9=i8&xJi@4SA77EwgT=7vGe$Bh z3Zy!CY%e0f&B8zngg8XnYuisRFhG@V4855>RJwlp{&X>3f?6xLE)Y~0yMF(IrWjSs z0DO1*x?SXb^2iN@5(QsZKyk4mwV>1DgL0Ze;(CugJ7)cg{M$ptdIZ`!W%e^hP%52^ z6qJamkktV42A3MCvp5hyJ@7&--Ir7J6zUzp3aZ2W@F*hU@-2Ik`YY{?ts$ta$OoDp zLEQ~9Koyd8?-vb1%#9mi#tO6^zlw)_IcW+$sb+G&yj}G18baac<@7bEn-0$X8x_d? zF20#oP|m9eT1&jF<6hTVHd0ro zhe;-j8Qq~iq5la(gq=&txoz+;V3LtgyQ8W2!THc96Ax;=PTZju3UehL?A-EkEzU>Z zdX_RsFz+^e7%AimJf@LrpVXgC4m_l!w(q1rOU?$`U&uR`sw4$ayn+JM zc#>e}#cF)zk)DT(26Ol9Ak-WZVoJfpLl*$WvH$W^FPuBYw9)JV%oQnGWJE2dquICvg>>!2h zr-gFBLV}s&^Qe36rpwAaWJ?;e88DQumAvIR-S*vR- zR%zdGqV+X|I=*^8LBITJ!`&}7PrtewL7k~A*sk1#N%{imUMAbpp-h#niRVI`Whb`N z4-_WbWiEf&0>xi9YrskMJ6xMv&IL0DoSHIbee(m=j5{;*I=*uhN(_r zs4TY50J>9Up0w-cV-&w5It3~QDedxMLi~R{6IVm%6F%@TilMoSL(;HP@?`^mP?saW zJz*+9=GTRf0kRUTi=FgZxO7qP8dh+=1H%vnO(N+tP)6P%xc-r71+fP+89vyXIXl(9 zj7Rx1Hg#?BewV;X-3)7*3d)|O4Gl%N_2GnYnmOlvu zZ3ESaYhEgI;Z@|b{rMMO?-a<$+oydJzGuF_2m7O^sG`^+v_o+gaX$vl%NCS@jtpn- z=1o`SO97gwFr6J@mSG}W(31v);r2IG(9vnlQ)f_imp{^Ff%Tmo1&n<%0j z0~l9!4*IEzY;XU9*$xDk^^=(KbMUTJzK_8YFf90aV=#(M7VL>Oqm? zYn)}0b%>Y;Sw|EzJp{-g5nPFq$bnh)j}XDmb>{(^a8OSk@Ba-n{_6nDJ3Hv0M?%eY z2yjUo7Ma0~qK}(zmgYfgt&~a7oJ_6MLa}rm)MzWb1GCn1TnG4J2wmnFH`E{0E~K=0 z_eqhprQeV2EUp9X@-X@sC}Ef6za_d(heM7U%D@A_7zxA?ZC_p!Iev`lbKHOTsPN84 z?w!L9js{t2X}{Mw(!tjm3RJ{53OT$l6VR{%S4KpQcyGSqOjr8?YDE>5tXsEy*)byKHuhpz5d|b(N+g=)w z0o^Nj4}e~EZXw=&_Zai`DCv#Ldqk}(M(GM~IgIVr)S<#iD$v-)f;f2O$iQfC_6)Sk zI#;+FgD04WD&|FxX9R2 z=ZNkENIh^`NAnmoRj}Rl1mx(P@!4Tao4S8x?lH(bbO?=tNt&KZ*#WNR%_JaEfoNTm zzTh$ZN%V`P24l}1%@CT#UriN68##A`fp~Z8+RuW@X)cauNr3$9Bx4&3?UDbu;`44- zZuw%$*X=5Y9}2A2lR3YHp}w0y*K9pmRh$pXPr%$gq&d`B;IUY*Sz)IS&~puL0X>7> z-2=T6ODCT+U41&B$VcHY=)VSZ#$w%q>q7JuR}dOk>_8tFs43fA-p&IbF_tTH&K%<< z=7CP@(}qxgh=!9@dvmae3rU$AkD!We<-KaNy;+bhn)(=|dC*TLc-m(J_X^{TuYsHys%lch_`;~FJmCzmCkFD(ap{qWpb4gL#muurm zHlOK~vUgUU4+tN)2@1y@V@J0$Jwb0hkX`AL7yv1-(uD$c%1Z`J-!x&GRZ0R&>77k| z*jk?7HcP7HOPvsL!SJCGWl3nYbjMNuYpU%c^sKt>{5nz9;!Z zok8=*-HmH91FWE>D(Ffh0;T=B*x&h!yjU)Oa~1P0Y|fRV|5=|Z`}pnT(QWgL_V;fz z#P|58nD#t%Jg9gVAO^cr2v{`d1JJ+K&M5QdT9W{s^m>jFUqf-hR%AK0u?OPhYsD_> z@`?WX(&2YmK5CQq93JIAw?Lb{a+594;ozOe6T7$_cZGBxu>=4*9PCbBgbK&ObHlol zg!Q5J5-bjfq{cIAk3xND5rdV70+$?T8+|kPl>KX-Lp9LkS-UqDyB>gk3|vpXed zH!&Ii@!lTpO#W_nc`1H)GQK?lKfI69z*HafC|FWW5cRIlsjZJ5^nTQ1dY;5tPUTbU zlCW10V2Zekxg_=}4{l>%w!S)yt>KAV)YSRZ-srnwv!cHX!`;<#a$cLLrTGDDq2O6F zM{>;tjbo>K?xyNv1G5w37qjWIIsBah3{B-(pJue=*3rCcnU68H^NT1E|8)7~@tTx- z(cy~mnT>llXk6f@ZBX&`!iCHG(BBAHa=Pq^q1)@JwAbcIJA5>Zxc=f{y4JN=%((CVvL3$Ct9qeb+5@q}KnVT_ zz&EIpFPXw)PW;ARu&lr9Qd3-a`2a#sAXElyzeyOVGvCbMyP3F^B_X}zmr39Ux`LTy z!WWEEcxvIxnAg1zI*dcAQWjHg9{rMZK@57YsPw-=g(+*puP;f030hd&8J@LZN_zI4 z5V^=V4H_WeGmKyhtTHI<_QoES5{>z)oE6l0V_iWc7s_Up^0+&9tsAA|Hr`xlVG`Ul zyX|1v@IQ85RoF@QJ+MqQ+xy|RSTLR za4TY|O;x&vyGS^&p&1ix*Yfz<&&FR0%k%$~UcP6umoxQ!?T{)UNa%(p(`CPa8`0{YYE6Eqc15dW~yfT@1|Iah?Yhjw- zFFa9cbch1(Zoa%|=B34xtloU8|Np)IY(#x+K}hE1dyab(UZ;Ejjt1OVld^2`)4$&Y zUY&Ia=f1jA)Jn%Cf5xv3%kKwz^GKfc=h$keHTBl!g~f&?eFuRHB$ogW-(vkHpq6*U zs^9Us-Kz`6wU1XVTK(CmQ?K++ndBxT6S?Q)YDk(e5r&Z z5_q6Qtc{xC9#KUVrX1lD@8hOKNO-opy}poE+qqC^Y4^g)o#$U}e7cW6JLdJN1G^d~ z^_5%OnS;O7x5I9|QVu*&y*y};b~E^q~$zu&5I7Dn6UrE%wh$Mz+)6|Lk^6LzXS zxVYOq^UsSz`af&S4uON|@7y^3FYc`V?d_{&UUe;IwKaLQ&uUFf`}Eh&TlTHED9HLt zU>0!80gt4r1TdU{O_{Hkj$RBY`?B9^dVs2j`{Il@l`nzwmGal7x|-^3`5yTGD6mPk zMlx}6_o7Ncr?ue%8`sX?dqH$}sZ`ss<@@Gb_4lvr%$=ILxBj)^i)E{qz2epojcK{? zP15&gpaO6;(Lzy6Hc&5*QP{&qLVJG>kgamZ;y|4{C12o5uaeJ21(2RzqYo2@qB=9UTPXwFfA?ewv;%mg8Q5>_ vFMFne))Pfh1iQdv^pcO^dUwi${|xUVre=#-uAT+FE{DO>)z4*}Q$iB}PvlY3 literal 27191 zcmZ@=byQScw1;uPaZo{0KwwNdloAja5J8mg4wX)&q#3{h5mZ8Y6zT3xMd@xBu;}iF zcP@hZy|>;!EY{52bN1PH=Wp+QUMR>(okG$e@$m3YN#B-G!oxe}i-(6FgdhZ;tc7O8 z;^C3tNlS>SJjS2F9WNvA?*F=IGD*h_d(V88hC<@j1>~g*XDAfJf)Ox3n(AR6v0Jy6 z30c=jX-TWS@2CV{xc36VbhbK!=?)oO?4#50w&?Z7;YN1Xc^odhe{<2$(Zr-BYDrkg zX+8W=LDT8I^Imu`1nSQp2_@{yMNV-T4+TD)1dVs}r|&WvUDW6;0MEJW)${k)CBGm-)k($d%gMn)$MTbKm$`f;%MdD`FNWU4U-fo zluRaP@x?!+pn{_Cl1UcCyu8|u+xtoUp#_bHF(rb>ufl!BCQnRZ{zLu)4KFXQi{Hq- z|MMwa9(?-PT|A(M1HF4hA|L?q0uXas(9isW7n+M8iQzdu;@VsDNRLj1#-i{;FOnF7br4P>vIpz@W(~?5 zmd9TR_O&L~`!DZbpQ&5&;<~nb`{q9+g2Ub;A|auSe0d7Simv_Vm7uX2fSTGL7p}q( z@LOIkf8R>5o|jkF%F|y5oD9;#e{{G#hUWwcNy3Rx%ft1tmtdAY5Tk;m0i81D%9KY8 z@T%g#A0t6mIpM>^M@qerf7eC@?ZWc7-hrK~XQ<4d{D;jSby2eTh6B^G`2PqL^k_Ue z3dMFA6&Xp5`1c!C3Y2TRFw%nuM}VK{Yxd957~AFjwA#0$UJlS zml!YfW4NELGOXs_+id(le1M(|q65nq&Ph$Z`nwMJFIXIKnf$S(ANmRb6VVav;C-op z_m!X(3{j2gAPPEmv{=v?aIBYH%81_|5S++5_xq`RAU(Uei4P8s|2zV3_7-3U>rSN$ul*l-b~fLZlKBm92NepwQ@vV}iFJ zh8@ZVbP5u3a8~RJeDzQ>X$efppm&4D0y#T|6IMBW^i~mpc)YjpFbhC`o@TZt0gd~k z5gtSe9-+Y48B0rboIK*z0jse^uzCXD+UAgzzrQ~C4?~4Qophrzs_+he{;x>2lb}#9 zB}F^$z>%Z|0)O^E`vP(<4sG(#;ln>%LAxID2r~p;NwM(b-%5yfM6@A)@Bap@BLjPJ z>1bOZ8%eZaIRzzf-Zu@|bbpq{gN0LJCE!XdX!JWJxobE7BO*$dgZA7Ih)x@s6Gtl@ zP>V)E?CD}xAvj{s0snxR#5cT>&rF2Tg*E-|3geu^!{?~pguq*y*c0J;xs`)Syxi{a0-x%5ykbiT~LFKn? z!ZZ;nT!1!0I|A7^R`=|nIa(d13i|~(bp{ezG-Id4(dU3jB$a`c3Rov@U^$QW&z9he z56nSr=CB(0N#lPHi-%!?7WcI26#r)tATIjgOm3PQ&(RtLN&NpDx1LBs5H(cdV6mhG zObMn6X*p7X^VphX)Xq0oHJE-E>i3!%cK%FX_Wft+8re0JY#Ii%{MIL>)03}&RY*=@ z>Ii+e6sCrXbJ_LEirQjgZaC*SOm&$Rz97yM@7H*N{sK>sjWiwzb6uaa5_Vn7%WV}I z6xsas_GO5?7~;VlRN81$IQQ2Q$651om(?7*7J;uN4%5b*6&v?7B5#(1vtiQ6oEMeVtk^LpKF_(K;sUF|0-n%2 zJ}1HObVc+sZjB+69)` z)jr1u1Netce|`zzo)eZ)du5M!pl9&qCAC_iweHVG=Y86)C!4r|DM?^H~j$1NW1#CAz<3XMPQ-$f2Alm%lw< zIf7#t%Fr#X>e7jeHRlSbQmOmuXUdgvik5Ff!{-}$y4UUX9)d*4$;^6b#^?vcA{*FK zbb?)byYrr&uQ~mAz2a*YBH-Zt`(Lb1 zb=zs%_9xx{cAlf^Wh{*Bij1xPHQu6=)nT#1V*Lnm_N?_`*HQ^VjUUF34~)!$D(VgX z`?(WCWzM-iy}5d&R06~oC0}Ok?QV}Z&F+YrcQJLk6APx4+fORF{&>M?nOVM;b0>sl zR;KDA46(to&~cZuf8qP5beoY1M<6(ZA8z>%MI zxSm}zZ^B*O6+4QO_3uw}bMxvNlYw zwoQ4robam3bbH*h<_O-#6#*@vM;%5@Kp=tLWj+IR=ek+PrN|r3kK8)uFE~e(=qpT@ z_p0kUgwSfPEPiDuyn6pj(TIRW$Hy0i5hiew1x>U*8`-*v&0esw++wjYc_1E)w9RNp z5FIyiqWfcY>_CB4s;XF266D}X1TeP=eQRfpbm<53%#>4AQ`H{wUl#stU|v(TwN{yS zS<9B_@GPP5;1XWuC@(MY0^_Uxi6ik~{jBIlBox;MJ*7A_^}k&P+L7qNee^q=u;lc= z(K;T69E!dXZ!C96u{wY39LAEeujpZ%vnUzA&G3!LtM?@(BU49&^ok!DNj5e;FogSt zcO|gFNtmMXv=37w^aKID`-gs0A3Z+lA2F!yG6y>dVQE4^z|v&od0k>~#I zdN>Qm&rx7kqoQC3*7nUA)G6qUXh)>mQa$4u&S~T_?)vWMu5go>aC;Y0N{}UGJ=Xhp z7;Is>h=PC+Nl2hg2rIXySY2oHd(-4&MI3Psy~Ux#G(2@B_LKLb1s!r?gk1+dzaYas z627s&v&`o(rP53(KoQ!SW%y~PV9+|3h@+_LmC)REiSl18RZLrIY9ec0kg{CK3HIdvjdCIYX}7EnqqsI8H%#T&_O@(S4QW_D$~abv$l1r?FRs7HQ6%1)opNNE5wZ#C8w z&atkp=UfZfa{dvwTxQc*pk+AwPFd?{dU7_$*@12X2c+?c=e|3;qlsXuTDp0dzDIGs zHEtk!u?z1y5~b@M_3Zr3r+xXodKM~FO`P|;ed z>kC!KWG@D=*lK0pdouav?&ybH^Aa1|m5Fv2&6#AL%{-ftVU;!R)*C-t_RJQ-USE`= z)I4sLIKtFrLy-Z@qvXr8-wOn0vOW#jouvoiXxrVcGx(JROn+k1+poPOH&hlJfH5AR zP}eamiIra`)pJ{{wa$~9-z(Ly93PD|Y6yOz-$3m@s}riP>es+H&zIeoQO3j6G?^G{ zEq`Ot*I~M+xkYIH1{KO>@bkUW4s%Vmg5~^z>EZIy?Pv*{)5cV4W=Z?q>F(6T2iAVI zjtLH&unmPPUJf7b9Gp`GslfC5*puX@J!#>>>qB;HGr6q;_XCBEksEUr+t!`^0_>IZ z7289%W7xF|?7Q162uxkxk6i5Hi)a<12nm$rqT@0^yXF226dl%cnT+4CIJI>Rm}FXB z^I%%GG2mAmrg>5(-an(C8e7H2HniDXG}r3{$_&K?cGVv})NYE3z8{TPvQ9M;i$oxN zdMtgf>>>2b~=E_-RMUX7hy_q%?EGi2rAzitIZ_I#s z4`J8lOI{JXBY{5qaTv>SWNOg^@Vc{Ly*^zpFIy+F&_DSYFz?p*=7H!pAik9re|_@b z@RJ1b0c|!Vf!3fAE`T!Zzd|O?22#qBmbjXu^?zqN=D_YN|GdqC_$cM2b6`Y&KXN+` zMAbA8>uJCmOt0|Fj=sXkfZX3$D{ATY&$vDvY=ROq*xg!%VlLmydo6PBxT@7MbS7;s zUsDmpH++g^COo9%0}HwoIAz6e?NSW+i$A}9rLyYFs)iytk`PMbDia#?o15Sb;3EQCCE^h?ye15eXn`aV%(Qym|*s;3e%IU%qX(XY9qHi#vxuTykW@O6||HsnXZ1-r} zXwDCp<4VAfKG|RC)ZQG6w25d?+RfVq;o@w1j>qm+cn>j%u9`i!XA2h{#G;tVKHpJf z{O4_v)QS9GJFjCtN-Vl#P!g!Hj66BwzOFmn_TER=V{_Dc^AoXXn(C(9aXR}TUC-Us zHQ*acunR!L@__3v&TFt}2xfK!fpP>auhySx@ZHt>LxQ@bf{zyrEQX4*iO>`z9y^O) zf&DaYdS~dqy_TPvSut=$KE{&4Z2?0$I8y9Hiv$+%X&dB0JZ?$}f^{D0ehi-!h` zu$qshPksNgAEe|o_yj(@7CrW28j*ZfY0k@Io5sE6u1-{JQ%xiNCb3qzCand)bNq@_ zGob;2im}~T(+gsmICR@xw+80KB5nt%a}Rx)N5Z*HN>nq;mi$6E^@pu1HjS0B194Ks zrIQJfLxRFg8Z!g=sYFxcRTcYt+gdX%*1$`46QrhV7dn~<6k7J*`~R%I?LM&jg*Hjy zv9REPL#q!o41obQ|0}sIFddeKTWPwbJ>*<^&Z8l7Cx^cT(CS9a4i=VVgNoc=M^?4u%qBCA?jT_K;K zYoT#7&GtlG;E=GV;9K?g;!kiLQysGGUHt+${_8F)rsXo`<|7s5W|1Z_&R?Q;JHK&W zlzPSXNc+%3q`U&bx$WRN$3DY30ZU?#U{7D2IsnXo!bu~8fHCrB!nTW0Jdb|-jgvkHaK5-NEASVZL%*>Lo!iqF)qDtSOk~Rvb1O&|S_2RRIYxKGG%g07KFd|rJpCQSNrhp0 zF4DQy9azq{S7dV(<0Ol#?{So`C>83g3aqr<#Ff#nET82cvh^{>*?)gRHBj{Mrw&(g zY)4zGd=Z5Jv2$UwCi%oZ+!r%P&+_b#=t0q|DHmnHlBU9Ric0c5nx@N@tIlDQ9#wCK zKP6%z>k&F~IoY{U+ASUPAcDv29>|Jibr?Pdy&Hw~{zxWl*I> z>Fvd3a8Kp8lRC7>9apeo+N7R6=dB1{X9LjK{^Sj~q?g|x`w5xdFTh7|OUjCYTw2|$ z_pfsA0a#~iT7DAxjSAe9@zCtT6#xw66)k=k;UEg}@(=J@ggP?pJ|KVAjiKz^(O%AD;U;NPf%Mj!(N4o= zkd0LUd-3k#sIT7h9h4gs0gG8jx196gFMbT9?QSpyHb6ep{UYsK(7-k<}(ArQ{E=J@@VKeu3!-xe&VUf|G*GMoqU&&26A0b~#-9*TMKnb4+r&6bv{hTpt6jR0q=ys-5u~*; zUNU!336H8Y;8711;E}Qri)zXP{^7@QyjBBUbH(HI?2c~>l(U=xcLzbTX(q_L3QSn3 zgJ9L#TocU^ zUIAHB?#4&aAGQ4={+%5>0KSG$u83Dny&!#BA&@bdSRJhu^43)_oQWf-&pL-OJ;4;z zfo0jmmu=d_sqUdftz^uZj3(^4|)%!|tifMYV zFcb2pBoN>Q_nRa63pI0%!&^R2A}cl6#+K65Gh@m@!1T~II$9+tsU(Sh zk)pEYoPC>EPldZH)w`)X&r?)W=NvW7Jyx010vfbN)a?rtJ>^vkU=jocz-{FQifq-@ z(g8ouLr_j9XkX{BresAY@aSW->s+y8%?U=PQYCq~?=6y0R`nM5Z`}Z?dL9gFt{9aQ zU77kLJQR$gbi19GF9;4KHnRKWvYVZ$qsKHAN`wh^r)&2%fTNmzpNV_2ltqfEL$GP) ze9m8OyGiWO`hvJIjI*#+bbrXYd{vD1vwv z@{8GCe4Fl@(@MN&NJ5pAqQ}ScKvL*bo*(OgxYIu%=HQH0nEGiVyi%~1>lTu}o-p-# zE?N8ua_+XFKP9_mpzvB21odpg`D}(~{M2-JVpPslPLud9@!k$fKy}s53&KZ*-@61G zckHq;cx=4awQs*gV65CFl2S>r@>P=cwO9*Por-m0tAcxI!nM|{v3S>h@1r*@w!Ttk@H>J?s!m#F38YqIbvGGn5lwG23=Lk9pxd*%T3$kYqCNaf{Bf zM{FD@Ic5F}ZG8<|U2hn@d3VZa&qRj`|J&t--SrV|MT~`9j?yk8ij5++*g(ccB!Lc- zrQp;-CG`25t7p-j2jAYitWM31J;dp_cdM!wM`o&L=$PrdE#4}#7abu>@r@llo^E-= zaW{QsP<%AZI6}}NWwJ0WZQ}?F7^cU~4+0T@L@D#(mMW8$opl6Yi+&y@9^~2&HwkPd16PG&69fzrJ zN7Hr1zl#`lnPzw0UG06Fkfs#xH<=dCA-oGxN0~v!+=qr%Y?iJzLUcoW-=8tebjpk7 z1NL>kIVC~VSeoSk_kA*XDO)blYB$Q>TuVxHC+(&}Lyr+&N$3rx)x}(Tm+39diiQl0 z><=lg7tLCQ*X@m5!hB5`6y0|sR6N)y?T*=Os6N96r|v3mn;i(nz3g|B<=;){R4N8F z?<{Z`*1%~6?UQJA64W#GY8%eaLoeAwFv*e^-KrSdC&l`8Uv0WnRbe>N#nX7u9so$C z$9ie-Brlqo=gI5JVio=OH@=Dv0GBl>+24iFs4K3ev3)=Lop!n++QBS-sq}{*>yYYA z8ib_!Rr~p29B$hUz|tCQ1>EI>Nzac*%XZz4qghpPp5m6752)euuXP;LSD?M0t?}NW zXz>fJRjnVzoQQZpMarU#eVew?mwQiaQh6?i1MF9!^UMWZ@$b4G3C_B5il2=k-Bm)E ziY~7S2v6sSMRSZyj8s;xci7t%RYYZI{pZlvT)=f_?7c+)IIK*PB1(q|DC3V^!aCU2{YD0yi&)0dsFy}aUdtC5`iH2saf z-5b7=S9=hV5VkO=;?p7%b3;I#D}I)j>m@0VMNgBxqv9qM^=UnzaaS?pVaf4m5f>GD zkIBkg0-nLX@SSM|R{B`OgovcBW6Bu?RTHbkm0R6Xvx+VunS#z%H>T5aXY}{C!g6fi z5|${I@@TxIOrjIKF9^ZYxpSDV5K65uCvEn-wIKEO{UE159gxt{#%$WG4=}}BmZ~qi zFM%=`4$fm9`U+|O#Do9#&07|FZ#i%a);&EI1TSe$YgIn$0a+0+%-DJ z2uBMeU^iBDa@FXTzFe8KeqNq9=DlQ7=dQX-vj__T;7FZ38uMyywXsyrM}-;Pp}Ac) z?dOsX@FStC(G_G9BA+$bLW`~^J9poz)*Zg_cHlarqL@{ars{;}sf@(Cw~1tfKZF3o ziw170A|XlmVaMdy1-|>duuWtZmjDL%qS1kQo`$f(_@`z)F7vC|U+FCX1Rt?2%tI&J z{56`Sun~AKpXfoJ|4-ET5`C$YghVoD(CiRH zI{emv66X~({7)1LcDTR+=w9SUt3=2P9bq8Q<_4f~qy{Ie0cxG!DY0vR*OvxC@s$&| zu0aH1P)LQNtezf|A3VhjXp|9Prv4KZBZAeuW&ujV4VV!AFoFE{ zQGeqtb^2cMB2d`ElhW8~@UeDgvul z&(fMdMfbszIREmk4zTiOkD&?`pcC;FFaMxQ1CC+|s-R6z^*)~Zz3oS3ud;*na@0Vy zZ&4ch^iM&&mdbz#PVzhyoHuVPvghx)P~T20y!1LlvUKHe(L+|`=%MxrNlC`$YyMXu zdm7N5o9A!#w`&K=k`#i$%8KG?Qm74B*Fgp6H_(M41?7j(=K%o_t1974&fXP%Q# z)B`)4^1>>f`V5TP#3(}K_nJb$K+B{nXkuLW9k;Cy}R+_~uBRp)N`1=j?UL+K8 z*8N$j&bO-I6s^^09DS@e#3cYZ_NfkH7#AgvO>an=f?fe z-9mS&ZPTjJ0>gIVf+Zmvugd?V(6TR#5mUBFg?}COQVn`)-fqieo=3 z&)H3)Q%hQh7kisPPRIpbpHDw$7ieLEF`}P9y#IEBM{xE*>guzbcB+=$Y5f8wQzZjZ z<9f!Cp?mKvbj3JHTai~CC?>P5!8IQ)i>YX$4gHr;rnze+hX`Af5KJktaXdd=X{bJGGU)D ztwkcc3M~776x?;IvkC99Ac=I(toXdQ(Q;k;y7|lW&6&HYU0IlJ!4LUr+MnndHD(K* zl{(XtEa-dDT)GHk=q0JyZ(RfL*o$apyU;)F(a)y^d!?Iek#9=}=+lWGiha-HNYspW zw6biy|Ei&o;1mr{R{8qyU_)^KW_}hxPYQbVTt_3-FykUr(H8UT*E`ibOSsQkida6M zWMs^%#_X5L$pe>2asdhYXKM?qEdPrsUkE_O4W|GIZ^;jqOs(RGa*Om6di%9gY0 zBSj9I!olp?Js{H3R;_SzUXL326dIB`Q~uNSOY6x3*ZXPB<;(bC_LY_T<{^ogU~;T5ZL7ATcw4_`E#KtrY2+XtN=6)zt8fkzy1vu7%V+qrvqZb!TveHr zoaJm(&uX5o2_d7fjp~~DJ%_!=zRU>W1%_U&ewGk_W!VlOlxRTIv5qq;#~?FS)r1DD zRw7anH4wGfUt?8UZVTne>>zxCBy5KxwQn)?=$4psy5Zez(&2IGE1u zM_r~Rx85~!aKoeKJlhqB3kwQp2EWF_UK1fG@I)YFBHuzC6h>lQL7~+VgX4Bydhi=l z0az>15LA8+a>jtts>XOrG*r0^=ZqpfgT|u&FU~Rxpc-Z_Vb%^-g$(0U7LklhI_tCR zr4%U!3Zm+-9~%c5*z#YYBxkDf<2oV1fl^sGKruia*AnVJ$-XZ|d+ovV$q6G5xg3@{k;1auerE=Utv{vTe7CbiVDOM$6hL`Mayb$ot#NJpxSgC%P}b z?QG<%v^>h37w@eWUdWVB&`-S<&cV$zYL%{0trb9L)~!8bqwT3>HnLvX2mF9_y1x6D z20n9=es|TvlLVvX$?J?{uu1agI%o~y@xZ7(1mlOPy=ssdU*_;@1&~q)VE%(+gePrH z5XVoSGo3G6mfK-_zh}TTYb$0(a<1#4Skki*2ZXoJ6iIM>>s}Bhc9c> zz1pF;{vqf%XS7p)lJ%=~yN-Uj=ETRsF@5_WP|3fn;%y(0P;oQGT23K)Fd9 z3z6;BoM8GRETDmgxU!ywE-TYYb1~Qb@sG)Z-DeCJ*9#k`iQEg34X(=b@>k#;%p}EL z3UPidk^HRy=r<}Uv;9@~dhX_?*Rj*KEr2kL^O z1??^%lUmS6Z|8VutMInx>RH6pGhi6LRG8b)y9K*D|4c8iniW)kks_5>VD2eclQIT> zYAx2{)8qbdm&gqApCau9 z9dVsWaf0T_7saOPM;pTiK_v<33IV29$1Wh+zC$|U{j5Xmz$yNrZ#|13sI4Yx6G?Au zQ=!!z#-(fXH(xW-FzA+I80->_wJf<||EWf|@;EiCc27#4NMH9Df3J>lsNGsy`Npc@ zC+}N)sq@a(gZd(yJH7EYjQp#j1nhK_?Y&mha$Bz1L|lLPLA%9A6z1$x?fCYqR+^3` zt8#fnKJ_|}*n3gj8*in080H62F!SD(@52`Wsv94sHzi5r4scr8uItHnJD}VtuII-@IOTX&JWVZqo_bn)*X)Lw2;@s`$ zjMl8TGuD=0YN}mntV(H=Zr;;P0w2}&exYG4o0ayd=5_uS@-Le2#88i6%qfb$ zVB)Q^>vB9Gu^&e}w8QVD#-=2xriK;@v>pTk0x(g}1yR>HXIJf&6@P)urZvIDOw}~? z-ey-~UcoVX^v5{@6V1&5*T<>2+=Bk?A?~4_n#3=C!IZO5ynEn)g9I_34YI^>0}0$d zFRHQXZ@g<9$zu7v#pQiX;5q8p2~#H5LHdMHMRnllQ9-c$(>6vF>uL8ZCx>hIHbx$< zb$TX-bKs}vI4QF#XMaewi?)u&<*q9fXsKG*))&vkcc}EIz8I7o+*`z{r&miyr`NBI8*{iL5uv_k`w|ghd58VCD>e#69(x&>%`*EN7roF$P>PN7>=I!mFeQh5 zC%tYyAYtLWE;{Quu46tu){<+!J$wIDiDS-eBwukZ(dyc6^yR(0z%fs!y?(Xbs*zHj zQ*wgCR=I1bHZyURdd9~`gqmKt*oYUAB(cNrsoGF-oh4DmH0UqU)J-P{Q+M~AZuPhn zVi(@gODbqwqCG)^2mv8eQi*>92zh!=JP`9Kuo*O-r*riqB21mz))ul{`NX&XqCLat z_^HZ%0w1WGGjkQ|Oz`A5Zk4z^Z!=KX$n)`-VrKyo8PfYI>IUu(2u-kEFpje`1F3z0 z-M04>iWZ;6uhEOWm-@sF(>xF2R|?$ii%;(J2aqhjU`Lq{ModE{fZtD#u}+>M6B51TT}OgpBfIUyHSzEa zxeMuyizFT(V6E8>%0JM+N+c6X*w&y_9*U5RZ>y7<%Re{jK}Iwu zBR}@b5B(I<5ynbWWM7AFS%ZRt20J63DoSv6LpcD;g`4`tAc>JV?h|w7_lx)rhCxo+ zjBF|`3s9ZTnWv{QoX-;;HjecSvC=AO3Um3zZvW}&se(tNceFvqZ#7aOJa4YAmkF|} zNDpzFZR~je8c6Z1hK~hqD-k2v(O$LEM8Bv`swL%1bqt2_y$3=DQy_Q(JYxd_d6%_e zt^dk5b*>2k7cs;9-LWGSL}VbO!$PBigQtI84M!f1N7vi?KnK!+?C!gxO;wQ{Bd`IRiCN; zuzhKH_Wqf*Pkrh?8@Ywwo`qi_d={SZwQzl>G2vX-@R;aTLG|{^$~7cND#bF4%Fw6@ zSP2hzudt5*emIP~awH4F*pLc~<7~1b|k<2s0MtgkSo^x(Z2E z_Lc6BPNNv^kD9A+%7(n@3kCBk3R;*q^NaE9;j=ec6&zyAXA7xfOSN|!RWpr6Ti+SY zpL33ad|iRrWMFB$^jGgP6F5|`)GoA^l~ODnO|EuGaM<&2o)NC<@#G(AP)jY*jukqH`XYAI#pGx|&u?WKgcoz1|&M?TYO8}s(8l~S^U<4eowKVls0 zC{zLB(350RsMGiu14ebc=})>i!k@&zTM_R)m zNe9vYV((-`a*jHgkmH=p;ChO`rSZI-6@UcQ3U3OfmdxAezLwqEtu?0~=xAQ{Lbnl+ z`c%^h9DiglodC^ysqC!k9&ej?3-b!~qOh9qq{i_gw;IEJcwYrNa4cRk8Ol&H0!b_R2I4 z6tDjwNQ_bhreD!#^Bz%`nWr!B_2k^iamEVQi4zw4U;3iOzDLfNV6*zDpPKr}igGwr zf7_a;(!fO-EG$q-mE^{m*LZkVHrXqekA;&Ua?l>t2AkxsknfTUSeaB%(*#dCg<_52 zPr^GA&mADLT%f1$Y4JKtX?^Tdh8^$bQ zyFQf}WHtA_F7Oy$Plz39)9e`0bucX84PSfk9$f(U(d%UjTJ^5cA9FJYGA8pShWTKY z73B-S+w(JdSXIsHk=L2R7GK>~D?-wB>REWV0`gsV2|Aa6AvEu&BzLL)R$@~b7)#yt z?HY~I>buqi&1pqqf^`2RVp!>k2ijZ{yg}Hux8JBS_C!IVASZ|VS_)P^w$8R0u)I)R z@D`6|S5~+_yHR;5iS_F3#cY8BXOnoBjRH-<8TKtvEwYO*|8=93&xrnSbi7IwQ-=TEllT3vH1fJoESC+} zx`SX!z8mAqnHQ#^P{u<5c7bW>iXlN<1@K2}@2vldo!Zh3Vy;z)raXiTDA08Ksne zUOZ_XCsWrvRVYg*kF^ZfJ4u}!xl%86ua>8yNJ7S!R|#$pZzbJGZAKy~NLaZ-Us!(V z@ECY;&`X6D11}sjN8DhC=_zO=8y@RKb9a`m<)8?kzJGIEY~=eT+DD!jqOwl-YPUzrvyr1@3iC}-BrRi z=*hA@7du~#UE~ClGlWF*p8-Y$r3cU>-;L8i>uxNZi4t=Xu)!EF{K66yLQCN`*E>(q zY#tr3N&PC7nBgP2j|angbx~gWm(P%FU6wDFLotbce@ftQY5sNYi~QXp>+k13!vufE zZ~rvU7ib!gJ$oPNCO#CEr>4ty?M=v#TJsK5`snM!K}<0)>#-8A&cvfwHIKD5;d*?n z+TdOy7lRf?cz=h{LUdHr@fT}cx@8q%kQr!khnnUU3a-6T-7eHCD3K~8R>38K{0*wB zghRC=-)lzX%-_@%CJ20J!`SkLwHWT1ZMJV-(3Xb*RwztA@4*leDi79ljU`~SdcLPC zMKTxvt|5_-f`~21UWGg*d=h(HldJ0p3jm_q2Qb%k%a8^|Y(jt;Im!Z(76=aoH>nGVEZXUK|f*w4;d6UYg6{;`9zNhRrXR8nZv3c)l(T4YXp@Sbv+y+)sJesZ` z0fb_;TdrCx-s0ZXS>?z6R@8z#FiBxx&s8UM)!@8$P5u4!JhAUv^J9ZuuNWiwBa&#* zPhAO*4R1pYp+|?o!OjpNI-8~UCP|V&Ii)9qT|o`oIe)p) zyX53!3y-V6B^ZhJ1GN2W%gHh9!k?afkRRxSyw39p)07z)M*@*(!-qH7A_1`4Q^*ql zkff%rb6Fm1E&xMTg8&0nihm7k<~7bN(5Bx+b?3#wOJxQ@E}ORfer`UGCYHx|4cz%a(FjmrV7OOOdlU4jl%d4oLe zTPv_a!&?&srf57kG`tus!6QIwF-~r&A1Tth|FVI|&u4y4uV4a^#R~k7-ZD0Lu zV?2#5?#0%Sb}j3__%76H1p&NJ1Ccvm;uGVpkJ4m?(FNTq#g9hCJ97b~e22sKE1lE3 zgde}EM6}MOBNF35e`U}^pb;194$<1=6-)wEs(NM*+1o%E5YMSV(ZbDf9b;N5wg!rm zp{bgmzS1b!OT+C)41S1!MiSw$<{YEOAv-Z*sN-!qqqHT)ZAp3?^c*7Ze0c;M560{C z8*>&pwVAlu_6zK=b`oqzHBe!;j|}#lZ#k4xHL~yBP>sJ6GE_Fl-qoZmFKpx?SMpJA z-DE@axM(B2(5$Yuhll>4VqApP&JwM*=(zIWK;CQi>pvg3j)jD|&(ezO#(3^Ij|^t4 zC#=2xAxBeHKiFDk<&eAvpy2Yb;uuzyBm*frhv0nE_8QQoK}^eS{PGm&v*lq5Af1}| zFrut5^}W!C5Y_(6N!VM#Lt&UKMXDt6!&{Gs8Y^*x05 zvx;Mce{fr-w=GRhqjW9Bpqp)udZj``t3`D8b%S#b2&AU!bp=yIX*}doo&&U1cdcN{ z!K#^Jd>}%Pv43ci+iEu6q<^g;1lG>)(SOj2MefuQ-#_dzW|ex38#IqD>y5dnxkOW+ zyKalsb?8=2z&Eou7F{G&uG|tEP04XF9{9c{eZx_3V)t9&lZMvM17baKn!6 z^N3Z%9XjuC?*+Ne2SJJI1z(Ha46Ehw*1*J$By$(VxGybt&p3F#jeRR=kOum-N?RLR zU4F4_zvRBA7c1gfT2nIOR2se0b+Ko@3`5O1GQT#?UTM-AQ$Y)Ga`*TmWiZ7sgq9n2 z6y4j1i(KWPbKpce_kkv7+yLl7Ei#F=>e}`7kYy32^bgk`J)W$CBh$*z5ny9cFVJ8! zcCp#$7iAf7+X!=F=vKWBbs}Az5SSv{HXYpf`CF=lK8u25}@(!-^0JkE@vvE;xozToIC*@ht0wWf)pl8L-zfX$p z7$|Fbp$&kE^Ph+SU0XOBK1)+zWFA)DO4`=vDE{^4Lcu*=pzJE&j*wMCV)_}$jqap4 z2#^l5VU^!KJ@Fe^b*C-|9pADhw@N`>1@z;@;A}sgQp+`#EsS{#Ak83#3_}-Z~B?HKfcmrRrAu%#h5f4q|@!b9jh_c$!t$Dzy%X+~= z4d84dFfc3tb&G?!?I>X|c|A9y5Aw$!%*R0?0rZpmRf+&j027IN{=^^RHbF<;mtJl# zQhk|%>9NqP517j1v$=Cl;*QB?z8e^YbfV4*6eI*l7c?vmlHh(`n)0^N`SbO%x1WOR zNl4muWkJKKUo15n8!Ij>0f3dY_p)o=9 zGfa&1@0=4@5j4DbW#xHWLaTq&_aZ%XgLs%c5dS1R36VJrN|W&he@6&G|9jFWNZU&t zkN_qg;JzYGc(s2zIuH^!z0@v{NC4GBtsxx_0;b;)10IHp$TwjQ?)!d{h2`ibhTq5d z2=%m3#Qgg2%{#tOU%PL#WXLWB*8ZP^<=g_FYrDL01P2#{*O48$@j9rlJ#9{p=AgG9 zTnxhe`xwt-Kt#N<6-D`%NGNEM13f2K7r;MrlqZckD5=sJYI3E3fMUQ$Nl^NArqwxOXhs$#kHF7 z>p%CNAbi19I$TvaiSB>a0jg>bv?@V4tnAEfJ+I(@&hd?1G-R_fX06ZbU^JNjz8svR)f-tTl^h}e~G^x zi(VT$*Y9O}7$DBfYHB@2e}>wUk1GBWX`?(;0B5wsmGIsOiBEt8NaCQpt6kW_0Va8% zarbD)0ka;^@(-X+=ZrZyx2yja^U2;`1xhY*f(g&<8|HW#@O9RnJrZ|PClvaF zh?q89C*#9Fzmg%J$Ij#FzU;VD)Ym>2*o@FGg(|wkbEMG6^`XFT#*E|una{b6m7&bP zoSaa$+M^9!M3D-r-Kv>-IMB>&1ZEOF-iL*QSRp3;q3{!aIv>1kb}|5X(8X zZVFrW=hOnXWC_g`K%MGE$1jLp4n6-Z&})uXW+)L1!;Z7$KsEZNo4#O{)c|f!qNZ%X zB5~_L9)7?y$w;PRd_Uh6TyC)eW0lbaT}BUHgt@AvsMH%y42$!>9e*$8LpZl57Ja@e z1sVacE*_<9z6M+?9-IdqT*%>;hv{v^=IkPJhuCNh((ID%j1f$U}P@z?2J@@mZuw(Xj4-dz?pXAm@ZeC>XUPH|4O%T#hjPj#TUaMPeUe!w#}w@!AOB)guOd6w6k0cP|PDmBeGpToda4(J}Zub@w2 zqaaa4nO7#Luk(5C?OZRH6z(LN-EiSBU*eGZnbZE^qedXw7;aCgf9#fX{4SUPv+fyG zcU_yAoMY`Oe3_W24DuHN zi_U}qFtT?11vJ+KE(;KiiI%(=Ent^0`9>L+x^h^WHge`v^tY)3dG!Mo^gs3O5hqaJ zw%)%1qNi(G#K@a?81IAVXdFaGL~_jsSJ+@=kZ=}Mlf)-^(Or9szO47Flbv5(Rwll4 z?3Vp{bN9zBPW_6ZP&Q3c&vev6ghfX7TRFk{-7ozh)PP!$pJ%SSN;0IS#Bp3*D&_D9 z%WQ=6Zt4rJ~MeGy^N)&BnGvy#S7+=?EGMp=P# zq#Yy785vyu10pF-UTcc;CXDt(l3?a0?>fm_5&ji{2G`D)?)Kx_N{skCd{2gHg~Aq| zgWDxQV@{X*t&(v${uR;PmCl5b%PSo0%Iee3S@xPoSb#@0=uI~3k^NscW?;^jy_VL6 z#nP`x3H=iN60IcQY)Y;n%iMfjB7D-|>FGxk*RsIP1`!+~ZkwZFH@m#wsPZ0Gs@FOh zW8FHS9t9wAESkp5LwDw-*V>1$(9~%(xKN^)N^(L~WnIxBTSVOb{LDeXI$dg*3nXG!6`@TY~9; z6+OzWw8opfY3@OUQ}2Xb3l{GW3H?u1=N`{w|Nn8v=*TTmN|a7YL`oD!Ii)!tav1JX z$f+FCXbznZL`NaaVRNS2G0QeOA->Kggi>O2Du*qb&F_8b`1{AhW4pFppU-t&pX+^i zy`I-|G(W1V5aSEp&x6uOW-R&ZKyp30$}w8@APuqXXncsf6T~*Z$CL5Y_3g;EbZc5s z96P}X?5pSl{rGcmzlQ9N{@~ofYQ+av^7gM;=Av*Xc*8IlLnptDD5X24PX7V}+kDC=Wse4Lmbn zgEVQg#JIUnrhr^uZ;q+R>Ubkx7Y|Z1xcS@VcgbL_7U7JJ*16C zalubf4%C6Y&5535ce#~z5zUWPU(RS)RowHOagw!YA23Vax55tH?g|wE%o|dSvBEQZ zSh#{>Nhw+Ar1D+-fuindi!p;O>)=Q}!5)WeZK+z)&>Hw)+seBI@^$M?_8;|C$uB@0 z%T5J?B7WDdM=yhOaF7=7JDwpkgzd8WQhZ8orMEf5#alQMJoq;>^rG%Qs+B(CehsI- zaEAx8aZIE)Vu3R-oEk|GbzfvB9<)-(WMtc(m~D8VcoNn|wDYTrM}#Rnws#m1`UQGCPb50>Eakx)ta|vo7i^pS8lU7NL z9L=m#e{#*x3hwBceT5l`T4x>}$6?s%dVv!0s&d*+}_+MlxpZlgPyV9#9`@EtsA`_Eo!?3K+JQYgbr+n&>kBdG(vsL27skzf*88!3| z?Ag(zrX|~W+tPLH%MKkV%iNX#Uiwb}a%#bxBkc0Mq>gtZ?%tuIC7=utvcQro0;v_- zUxnT8O;c*W-d%TB0UaN=@oY7JcYECyr*wr2YAyap7$KSJMW;;sQuftT=BG@bf4H<9 zA!jhVsJu>Y3bE-(zH_CTch6elH8^sN-7$qZTq|mQHX*T#mpiuu4Limd2gK2{W%S{! zneK0ZJn02`KtAMfe%J>a;gn`FVZYJT_)1WlAX2_C-I2f<#AcTeX(Uu^gUp6(-d+?N z_XH?UPO1^n2QzmoKkGU9Ci>hGcK1!hWsc>J>DM^956j5PTQumfM-*65=V=Ze2}Cge zqi-juDOKx`md_{oQ_gV+*8;i-6YQj5$kQf{ir>{_wz>tEF4@wqePWsD?D{Je1L4mR z5DcPj$-i|Pzke*_;9U^CK{sH-C`)v9U9O3ULkRK1KT%^)d|ly1eRJYJ6mM;X+!H7> zsZG}2A$xESJeLdpR&oqi&+MU&VvG9%8g_@GpzmNb3Al7D2;MKYnP^ODP(2qZ&6xf@uoEtI_QML$Y z%l-NdaRd(-cYZ_XqVn~tQKZ$6y|3E_ulq32J->wgIg;`!NC3TPK%m_AlK=G$k*HRI zOq6^g1lFx%A&!550g?gfbNFXz4N$g$?` zNKyOetAX3#tDCSysJp&ZHcNx0Fj;%5PT_U;l~NeWgUE=RhOrxc5gt&)8oWE$RG{_v zM)9#?VKqpN3xJiz1XuGKZ)+%DYtO_1Jnx+^f=qBC1?50BtDemK^e@<13s*s@W-8;t z+avM?0((z4p5^4Odb34prdm+!G3CKl<>iC(aOr#N&VM~Do@baW{?z~J%Eh@ti<-z1KWqd!sric(tltW-ZQ*r;U5%e zIs0`;FbB>CiffSsC2;pA&;tu0n#BrN5o$To>zfzfVU_?Tme$R_%2B(Ds@lkKw^{H7 zlmjs-h&}`%zXv&twdfE}es}=bQ~}8b^WYg@WH~|5{%rg{cE`?U#H;&o0lekiz~>l$ zyAh&w9Gjk1S)8gHLCNVyeBic`(V+LKXgB4A%d7qnZbz=e4iFBvmV_?o}X%H(zBbo0Nkn4 zcj(u?_j_-M01XHYG$4(8Pj`PUqC~LUQ=LBoLMBxN)@AeZBGEGk$mtgD0 zOd6Pf(|_U9O6#wWO0)(RdSbn4`SghzZtno^G)ce>l=+qAmJ~;3{r1#%idj!ifZ6AzLk5!FRP`-NcJfp*)I2b z01RgXwaRJo98L$(ypK1t=R2z=UUo&T8p>!Mpw17e5K-UYnz1b>Iw_QjdAeHmzs&%f zH$oE9stW*%`{Pyj7}Hjq4?ug9Gk3JnerO?*j5K1}c|n?c=>z?;iP6r~P=;cN zVNF3Dwx!it_GTy31wXu!l(sib)8xH$A5u;CBhj~oEV1Dy*k7Y*c(zoh;Fu25LU}rD zzV@jH$J{TWRE3e&7>#Baekr zUBwSJ>!AOjo_sfOX*kZazp7G^%HsmdJ(D{~UEmfu9X$0`GKBdF7UO-%WSc#q!^t5e zT;tX{><%9eqGVrrCu6T-k4jmD4)6OXO{WAbry%U^G@iN~y#7^K4z_7CPa)1K>V=MX ze>lgN<9N}^{(!D}bd|KLJ zk@j`Qot>sG$F+m2ZABhKi)&a%%yv6QGh^?ydY>ZoVw5;%uWZ#4UB$Mu*m`^I6R4GpjcXyN-3zl&XsU|&CpP&tiu&N^BHfNAEl&X&Go zO)mi>aSd5(bcbVmvC z1tSM#qOU8-y-U!GbM#PZumdho56K%SgoRIUXIpGnugl%6sX%8MXnkE ztkaU$UE{fcS+&A?*e*rqUJ|<1LsC!Z*#Vr@Dbs>GY>b~-D8-b>^H@o^P+yvBdnhitTi6H9PAh_;GfhaVnwc>HbkI3kF)+`E1mBRT~d}au7B(_@H6` zDXi=0l&|m|7fLAYR69xI86Z-F0+EUDHI;x~4CcthR&3d-p!6x5n zyF>*`$9~%J4AqV@)(h<@`F%)ycrMyqxnIt2GL|A9)M4iFImqkAot=z(kHD4VX?ruv zW++GO6%bHJVH;NO`h@$4c78N)5!z74Sa$SqF@N%eU~83fSL@!@0(z2PDX6UzdG$1F z)*QVtRFD57L}cR?RBizR^B{6=dP7-aEDT|zeaX$Jdf!+i_PSf6tR4*EMcXyJbUS(d z&(57>C5i~CZMAsk5yNtUYGoSTs_~Ucs%kyWQbb{TqM2RQsXd{!JmqoG1gk4N!KeS| z@c3;=^Y&r3;`3Z?g}K?!TDtW6N+)(b7z;1RTVwMDGG+Y#2JbV7L;V9~-;R&eKwn&;0&(k_c5RECI%|!0d8_Q5 z&s|+FY;(C`q|T#1Ec(GVstHTQv+_~1(nzqh|nIuB*RDO^=IvXM|luj-Q7G6*Brz?c!a`U)4M9#JbWgMeq5_Xt^< zwB%|ifT4UKYxd(?8FS|G<3c}#rvGGkm|GMOgHOp zPp**I2&#urwLXucnkS{MbY57+p8D&E1+!{WloX1J_xJwnhIyOlE=9cDp!GC^y7EjB zkK(y!{ciL9v8c=p2~i;=zxg05Im4h+E`jhq3FP1-C$&!G=&e_OL8Qdd-^^8cNS*jE znf1@>6LY%5U0>3tX39;Jc1blPQz_5RY|-c&$h4$EKUP9|EpH-(I=#P{)o2L#3Aw&n zJb!?CTcTfd7k-Tv=PaNtYAei@bSZJ`gf2?8;I!Dq*@Egl@iT;6{7!l}W~F)>CvnE0 z{rUB5{0x#T#~9{@rI)(ySlgkkf0Ls>SQT%sBz1ezpTx57wa-7^x>6>MdrZ)MBs!x_ zx{TcBnM&i<^r+a1jc1YE%{XLQm~}W7I|_2=H3Ff{Yi1lWN?ext1<^2q@m|$ywMXB| zkRxmX;n8lLc7KUQ+d6|7`CLH_gv=!Sy>+-y=ac$iQU8L>T0>6!B@308$MZ+#gY7KG zTRZ{X9sI$jCOQ6k%E|xIr(45w1~$-64avw4Gkg6tCV4#A6fhNL*H_6N6A6=4_m13! zam*Xay$nDzgW(~<5F#_Yq8b5@>tH%YGV)trs-H-`7DMwFq&r5$FlXURs#Uj2qtS1t zG;JKYot<0gJL6bm6JAuNG-+d#LONuKW$>2zJK;pVy7fe4KkqIEuu7uegD(F)URKEu zE1L9o7SL)}4>x)`42r}yNg(h>1isteEmdae8XkC$v>>C6b|v;L-zY8`7ujE{<%Cz@ z$yA!#wpUS}di5vWIW%Ql5$l=U#2clg9nb%u;?xtnrV8oqC!<@=_lQXt@pp_?ajsIb z8TnE6e!#qWZ*GZHGatm;m(#YFkeP>*Yg)o{fQgcGZMKVH7)b2wVI zlCWK9(V2*j@bqR=VHX4|VfQ@M+lp_}XD2SddD3 zmz}ovfIZv2ysJh@n9RiY5}mL9fi^4)hm; zOoDX9R6#Jb;V5UrZGy6S%-L*3sa@Z1`{~Vg5{gNZh8b(69$Xs|6|zLRP6f3bnf&;I zk)?9+Xx7YCf~j*>$@-pc=NwGF%nF-h*JO>o3Mh3wv!Ik4bF+6(EQ%yFqnV*7)ypk0 z^cY7NJ}XTfDNX8(6>k0GWyka~qz?>XQpdb;*G65c+fp1@J-Nf~4Q9u(CZ$Q*hnsIU zBp3nj0BNGXx$9hviDYgP=jRu;$`NI3Mj5RBS^SWJdP6?_s0fb1KpGFHd7{9VI|!Y{KZx(7M{f)JJbKJrpU)3WgLfr*XrU?>B7c; zqzB??*xr+QumA=&vaIDtM-E{bRo*5#8J~F$A9fV_;`RElgp1 zyby9XM4epyYgq91yd>U7$O^F$?KGMC)BHz1X{8cJ+ptu${jKSjzs3vg%d>C^T&8LK zWZnLn=DIjIxCrSrYF_9#C{BKT2Dl^(VtjlH3kGLTNy6iwmLTz(AYY<`Td=;{-K+2l OpNWClkwSg9OaBMuhk&~P diff --git a/test/image/baselines/quiver_arrow-styling.png b/test/image/baselines/quiver_arrow-styling.png index 24eb6294fce347d87150e6a18e41658006af909e..d6fe39cceb5344f9f2e41d921f097468789f2f3e 100644 GIT binary patch literal 22306 zcmeI4c|26_|M#`YQlX-x5S6l)LY6T#l4PswVN^&6+09^7wz4K6dm~H2Om=3Bsg!*g z>tqjM7)zM3FZVU7@AvclZTIi~=YBly-~IW^a?W{Q*SXGh&h>sj->>)e{D!vLUbZ7_ zOiWCB)vsN-#l*CY#>BMUh=m#a=hgRvPnnnmnbfab*7Jl^vtS;%|bClAg7-k@ajm-blTH zJa?XSYlqcK#1fQ9ZnAN?IF{p);z9Jv9l%4W2v6w+#kI~c{I`^KOwj^d@nIj%E&Ib| zrtO@MnRW`^iT}8drOy?0kYgLmCGfvTJ2@40Z{I1%1pXAU2el%qSgtT8>=$s$PG39~%3Wq@frOOnO!hF&mj^H09?Z1T5l zCbY{Q#-+gEe!<7211yndzikV;hX1nq_|o>BoXG9R^Vxsd-sazQ?stRNKxcFWuefjf zbrX+C^31;*WCfjJ^{ zcWqc;qOfJoC5T=D~OEP-MDBY~Au$%8UU;ai)CUJr83} z>^Fmwq0P|Ea#Qy%E9c=bIave&^2Fll?~kV6PFpxd%n#oCBe{fpx&x;2m!dE?uq;9=+M9nA6No~$a&2=@SimzFnG_3cUA&3x=^y?19;6fEX*@rK} z_~dY2cfNt|X=FUl%IXYJ>X4ahr1xxyxi~dY&I~Q!{qvLb!*6F@sySg;ZA%u2vb8^d z%DMC3gl-hT%<=BI-s@Cz505gr3NN4f7zt^+PH|p2heQ)A$n2K`(ykOzpzgGxsZ#(R zfiWp@C~oE9@`oqYa3Z~%fGLanA5`Dm52$!F2rJuIp{8pk$o8Db@GYt4_bTNZpta*r zP@nEXo4HmEDRsR2RGK*vCG9kHh4a0$?(hyU865^mj*_o|d=i>}sde>w7) zWIw`fDgooTN|9lLEq*@O&Vt@O_}1kqSaP1CiwiYa2ntVxX-kP*NbjnKJ0VQ4l4!$6 zMJ$lRXfhK^AG_`iVSj%Ah$hzkV7&>fV}oqo;6kqL0k`p&vvWv(T*$qTNrbbzWMGub zOKjxj`IOCarJo;nU@)zllBVcgk}T*$7ZVSsAEzDGD-k$=t{w{|4WGx1?qPu>%ECCT zAK2~$!&CZuc!q789+N6!zc|1^2@yKUD6Ui^h7Z zF7!A;F^G^Hpn6E zweZk5?_R*_NaOitrM7i8>*2P^#w2G)3~^(9eQ{tWIdFMcVADt&Lf7Lxd*`FO?_ycA zk9Ni8`b@nF2joX`a+XeG`w^O2B~9d`?@vF0Yi4FiUMyt9SkhSc!gQYr+;`nA?wmzn zuXDYGgZH}b=Fx5IXC5V$u<*g8U~Kw1+t7x)WnmG`yy$9cQ-w-i>%>8R%k)&eo7wH) zc~4+GQcx@7+7n=6xjZF9SK7KnHxKA2-JC8R-nYnk%*O{fH~ICF_=|&7od>>)_yIZ( z(q&zrqMM-^X%Q}eH5|I(xp)_yMfCa+sn+X;jCQFGKh~#vUe2*!d@Ru=-1O0>U6`4Q z)oH5j%9Nuo6?McE`hqfCbVv$5iMp%@74Jo@PPL*{b}w$b>I*464SIcjzyA9jpw}1v z(QChrgYJvdeM#@UXq1+pFWJlt^H<^>L{)tb(lPkyi47v=F@3gur};gfZjM0Fgv+QHyd||WcX~6$ zz1zkCidwEWuS<`GPoS7hQ*IzWZrfe6G&?+^VZQS6D3XG1t?*f$2z+r4^i%KXY{+HG zEH4#It*uwqX?zbZzXD8)AD?y$xJE>DM%!j;C-t(KrG(v-x@DF$@ThWc{&2V=ZW?@} ziZ$ae)Ix++bn3H}$XN3kxYz90Lwys5aw&F{M!F%II{woRODIPF$k@I|wg+XSakMwr)0b6}P#E<;x*3#5@WN?<)} zht}KiE>0xZt#|kKg17Jkcmo-qhT)9+B)jVK)=jQD3GLAjhpByytOUn_3J14U@T7Wj z`{~bPtB-jkmXO?J`b>SJOOj7*Mr+L((ambQ&oz{qwK>m;`rlfH>CYvhjjjglEQGpwN;dBBju0bTo`nD8c( zRK#rNM%{hTtcaRHZlU}6VOke^U35Hjli>SF31hTVmmnH>uH(0sYt)p5R$ki^jyrsL z#sxmJA0`4@8XmF`IM3-}S^VM0I{*3b49$It)}}p(E^<*m6cqvIxwf_m&>4;$1ItYw zKU&lTqLU$BbzEvk2mP~rGZUK6ERL?MvYCyw=u$-8d|Vg6!lb^4PIDP+!Z7=2NwN0& zEcQ+B{|wfgVTYe>Y7eOIQS^xp=N8pNWg50f>$Obiy3OM8x3dKp%OxH!vip>hZhdU8~`!Efu-_{ zB2ii{wXmDB#dCAuk_`fa(Vm8hOnN(vH-Z*TBefP@my8xsNf$ z3;2Dnl0`JnxH_xy;QA+vS0WJ-s5`exRV&iabZ#>Wav2seR%QK~6N%m&kC)tsP6)@Y z4TXp@dbIx2Oe=Z8zC4zo9WOcM-cMLd!rqGzVk69k1xO5%683o|DZLH;QkU}n9n8_& z;_fg+g)(BT#R1*U(ifpCof~`#SkaAiL|W$^8pd6&OzVj}KI5^e|m% zgBn0YWP`uQt3KZXuWYk#oK15WsjbNaPY??xX*li|mAHlNaWEqm*XjkMv`PvosVsyt zK6aC#-odviFZtg#ORNz?g;*K?qmMR9h{f7h?nfWmAW54D!sPhOsBFz96uKO%OhxwX zUAl5h1=BbOmuz~fd7H#bQUX5j#;!I5WpG-|HjKz@WbS*Dn9;fPOzP>@A?U$ztK-~| z%w7`|wlxLSF&0KuG5z)#gsW#!qsXx{v{8rst!De`@zFN7nPhODO z2wC{|MY2{|p^7M4TfX5lkn51lKfuWTT7yu8|fm)BPutNlZkRu?E=RmUY{15UayXrKkd=@rOv<} z^xFcBTGET77VL_DS+)U(t!H^a7CaO@da57Y9$a6a@ijNVn2smsXIQ@}cIXp5AfoNc zaiK*GJ&_S1(r1&I)a$!B=DU%(HfarY(K*Q{@0@njrQzK4480|7V5PIfa(3uzYo?CC z@=`Ta(ylYdDYI8YAb*b5rh~7JkHK^jY3WjBL1kcBt%O_{0bY%Jvk_S&@0eTr&FNYj z9SHrE*S+q+Ac6iL1$A!WT?N+l!Q5hLj2K{0TqS6qTTzntT&;86nar9Tstce zXpUC{RSGp55~x-@p-Z7<+1ClVs!-57!|2!;FyGX#>5RMcJC}OR+i8#5E4X)EyB?$A^!gJTuS4QD?qW-CWm4r2E8C58g8_&ASoj2AwMmO!;bmeH3z4=cR{Z zQuhai5?A%NvnB~(b-tAW>&T4i1FQ2~z4=D#bFE$3_YBXaASbfGIO^e)Gh9Jjnj0Pjpzgiocd^U%FKet zXMfgIforcCA8*^yyL-nv(^~;;;OQt-Q^49DyYHAnDTna-3O)OoIww-~Y&Y+TVv-3? z{aw#-3%>rf_$Wkm#J)%m$As3O7Do*Rm@MEb;0pqSjF@abQIDt_wZzDM84o6)3f$FI zsNoW{7zgo5)Q>Or6`kZ)4bUYLEkfXWzPrFRT^QN=33V9e=JoT_?vXg_WT$NBKG%-- zz8>T0u{dbZG56O;AAQ_5T?AIRw%m4oSKQ0a4lgpstj|tV*6e13eHtX9YM=vs>G5_w~jJXc|Lgjf=x%C&1>Lp4pc99*!Hm8XjRAR4%K7E-& z?*UVMG%Z))1Wo0O4B2$pV0p*xeXmR$2^~J)5Z|Bd?rrq7PIL+k6@d2V{@{SnZrBV| z_T(;adjTic>kH^y6H_D7s#+;#gZ*L8u^*2D(- z!8NZEZJSc-Pjw!veDmQaX*qoCd;=H0B{q~`e9dDT<9ctnxAzC!*TMBBYG-)AV6v zCtBGEZhXSD`3U8Fw_6(r%k2c^AcAX~E=?hGI>bS$VkuQI;f55g^<2V=qS^Dsi4F}g z-`dVjk}DQumOme=5KLKV&rEzrM@%3m;5t)c9P2Z?*m*88uZ&HV48-84aT>`!3&y+< zq-#_xbN<|e3AbNM@|XQ9?^lV!RJeD}6U}igSbFL0mt~k|*L8Gm<1>nm#uE%txcqtR5 z7>qUwM0TZ{l4fXYRx?MocAQ=((sm=Sn%^aMFYUH>f~MSVs8E_*5oV~$gB_3I zXUp@4Hyh8$JSe~2P6iX80s}2D*>t-^CA(U%nKkp+BfXpobZBR$k!MF&j91 z@@MiUR_@DGagT$8DI^=cnw7oMk!@J7ddTcY#TgRDOwmKF992W&*n#GQah!aR8bx_rFMz+@JM2zOa9BrD!xPm zMKtK*G7@4*K9>DUF9QSANcY#mKb_W|L%M1FR$|W!ln4P`NPXKQw{Va(5p43 z9)&boTE(_$&$$sTIA1v1$?W$7~<&4Rb(#{BBQRkp<^2d4-j$b8_yKfJ15^i0Cl zJWi~g8(Q8^(}^f{z4L_!hi%ZU$S~Q9Uac#4!XK>2h-v3D51ZTr!$!WLdYsQ7)kh*G zGDR%d7^cnJ!Wb6t0&D8u$Aax9bI;cHsZ!Ldy4SS7?nlZ?lP7L1jkhQnP)2G@dn!D7 z+5@F?eM^Y(WRi~+MkXDp{DCS^E^)17|)kfYg+sO~_wu{9pl zyA6z)QpMKwOAlhlt1gbf!yBUWyiT`NddRG4K5Raq>^Wx?Y%**ftl=b(J97Y5l6)tQ zZg`858;S5K>oy!vqC2IWafm*Mw6laa>lwb_N{!O0XD1JESTobcRc`S}!Nn8g9An-_D0f44o0dfB zD0e|Ny*hJ@^P81dOM~($Z&m2e@2{MVf^IH1PsfeK!jV~%Ak?3BdIw$YYVM7yz8Ze? zOf~TB+;>GQn(N9?bem~;S-yY_0=OyZ+-;Lt3kYRzTMNyoRT-D$yRkg2{(#<$ATKuf zaVUR-a9$Pg#occ_viReI59zvYL=gQgZzi`G?V>5WqU}3UWSMy(8m2bdl_+-H)iSxU ztU@)5q+dY<7|M$D=JIsbU53Zw<^N9klV-Y-E9J)Gmvh{i6&RgcZJANy!Wwi4#e9=) z-Zu=RpUW0S`iM_tXeInebZK&mIMv7C7-w=4mkTY1j}&gk64$ImoO~v__#Ddzzd&3@ zH4&>*B_o|Cj?nkM>tqig*ruC?GQ;b^BfG2zVnf(W$gVgX2tP=O@a%_ zEqKT#m=i7RvUx(qKfGc6Vi4Q0xK$^I>y$7r6u>2J5lrh8HK=IH=GxdujEO_ns8j07 z;dU`h>1VL;GOuWU@LetOb;+hx?o-s?6_mN!zlE)Z|9(tc5K0 z4oeD55;r%TC$ciH15j1Bn>TMaEP|!vnF?^-YRcD6mo0B+?R!gGlHMD3QG=cc*|QL?+32BT zoCCreOb%TyV~n1QLl`L%u?)s-g;gZ+yFoX@5j+I<{M5JPzD_60iP4@P5UJ}hG$-_B z*%AU#VBM`Pv}sEebo-i<*-O9eJ#H}V9TtGGn9y>>y;larxTGwwzr@kJgagTj%1m;9 zIo_6u&(Z;&yG>h0STBeMFvZY~*@%1wDkt-Z8wvUXG}v25xCYqYtt0yH(vO0dy>s`i zaL_O6#aJ;{%YKC>E!Ooh=w_MsjMqR^Q<5THvBRxnB|yp>t&Yyt%+!nGQNpKChfk)|xziMy^V0?H+7rZYfQLPnXcn@!vX znG39d5-lF*fNV6w63FHrWR4TW)xMeD>u@ZAYJ()05dZY>t0DLfiSIFI^wULB4LnnN zqKenVUMt*Z$ig>^bThpBbbMKVBWfht5U2a|VYKjLl2~=?mut#k#0PJ#fNxrm(*n1G zG{^AKZWC;j0BUJ)uSY(S-f1F@n6q4zku@7E&<|&VVUKDY5Vm4H7H4>>N*uKIsAHZ1Dot(I&9MM}gy5I`#%lJk?Ek^S( z@^V!4A1#233&Yw-!-IcVt74q|3D+kW24Uye30 zP8)u7UypHI%^*T~?wJ+u41VP%4(oYrOg6NniJ> zx+@OpW$~?b4RPClNJWB1JO`t}OH@7FP{Zg;L=Nrv&Y+{t&nC;~o95Q$o9nG&%}#-F z@u;latrU1#^8okCv%9-%`mxa92H}iU*i7-=bnz75vWI5Gs>VWTmi6leFA!I%L|x6|u$x`SYLtYm1B+Fd(6MnHLtjJs zR9HbuK)_MRYG0&@3*r98T#8>_9GY`qQ=*;f<9q{CzauvY6sbth^y}vB}hRjH2t)!hu!4^*h;uPv~}5 z^ghGdPAkV?*LP8p)$r5yE0ecBu^zt8`p|PcFR%lVkfc0xQKR}EBn6k1HZd{5!nyq> z7*U;^l`n6yF}OO2=9`T(m%H^-I4y13b_*RPhSUTFc^h<3xjjyA)#|{xFXM$c21Ji> z9Pw)qKA9=-L2hHi*Rp<|_@c?Y{G)#Zw`!*L*G&@F8R@_UO$FzGF`lo@w(&wI?e7}c7`a+7x4Z-zD@YexQTUFPC~8^U|0bv zDwL$NzSsr1a~2K91OT9qJpSKJ zlXbUB9;Z$03?~h{0Hn@)-cJI+MFaS!4k6kdfA|hTS1HZQVVp=#Wd)IIKwxrMRE)N! zqDq-Pf9YS&&i_xccKNVosGdJRbjR;}r4dnki~|gyGZH@q10SSbhP^+ky4AVtbRt6##54M;qc!aqI>vgKvKoVPpiLnjwod zjIaTuo1108(a`DRzuc91M_5r@%Y4(Oa#b6=js@=b`LZ|l8UDoISI3{xao^OE!h@6Be zDKtZjL^H%Hi$N0n+aQu)1s>A+Sd)*KzYpklNTK6E|G~ZC?7B{IqC99X7J^eM@<89l z>WmZ!8(tLIk>lA+1C+g&9?1j$TdTu9*9ao1;5K2I`%stuoTg>k_4Sjt#?u-YrZ!0{nx!Y_|R+zn?Agmw~kN(+!jEli<03 z{GDNEh;NwCJ#}KGxBdA;Np?*B(*bARaltq~tBvgh+-9eWRY0=uI~E9v89czhoNYk) z#6n=cM1jA4dgM4w(A!n}1<+@n)iagzz7R)lhZw&X6fBXYHw;qJ26^P&&Q9$~A0&ID^_^@g|IhNB(LO0F6}onv#n2FbVN zJWD~sxv>1~{U$qO3g4m4%l*C&pHMdcIOGlMjc>QXn*9`9c;c8~QqBrowgsXznFxs& zGCI)HAocB}*X=qZK_EK&?1V-0wx*Kk4MD-C(6b$mNr6XCf&8Hf?`dxSU1-C@rz_(` z9+Mi?jQaN(9l&As8%mZN7v~t^8p9V3%cv_%E|1T-R|MzgvJz%@pHeMiIPI&URI4Cd zlm3Y@XtWHPx;sOkqdAKIt;q7s35nx3m;pLu&N&!=o9kEhJVbG-$J35Ty)=&a{0dfm zSCzuIF~e(2uQBWK0Xb?jwM4xmvP=x{_w`PX~m;3N>OylL1W6wXvxYT{s<;2TThly;F;h*!Mr!hK}}oS+g6nu zIUW{3&+O=-_nFB`A`pBTkcdrOACB}dRn5H-?_hI8^&n1hYL)86r+jvNucN)!S-}kB>u2A%qFWEj)@P}KV4{1?E=T_RN zE2HG87f!7i)!K}Vv$hgWXyC&SE04N-3fUE;^v$A)UOlgX$YAA3)@o#CZ6MH1fXua% zmDre@l=A2X9tajjbf zYJ9OYwDTD$jG5e>A9BjIFJi?UWhXullp;}9E=_J?{OsTcaWFDYPnK>DwG(&oF&lx? zuvs$7qamkgtro_J*t+tuS>0ZbH92u4GrDAm!AV8X_CHo%k6@A2up=E#jy_w;=Or0`cw&i=&18dfyU0 z1Kno8^HhZZU`wmkbaR@}lc8`Lq;Gi;0hl70n6izuY*hMnU%jfKpbTIoE4mCWi=62^ zGu@6)*ErIFP`ej%9moQs(`@eKq_Psu#ED%sYcv9RD@(N8Nf$zU-oqwK!{Q>1Bez{z z{QDCd$ja+)YF97qDNnk2?>A-u8VLEg>>8?$4$pF?nu&sIu&b`At~9xuO1yh#1iv1J zIHXQ#tTnZRyAPjOEUHi4G<6CiaGxr}vp{N%5(ct>utGkLY>2rM=1SJLAz`XT$@nlIv4~HZKB;n(cvR zM1?I2q0tj{;cwt{fuq8C#2`3T8XE}U^ZFwGcFzv* zvOcdqs35&r{pp}CrDknM(>dQW`{Kyo_$-9*A*2JWtsZjs0OfH^xWs@=zK_Cz>FHGm z7(Nv&%c>eDoFV7H9h7iL0GrFji57rgsiAhN3Z-VUwJENSfm^WJV+qa^sbrkDGCZPNR{7p&~%CScRc|2%Mne{ z`xT_Id2*lpJr1EojymY#4H)cy(l28_XhXsU;|~DRLY^l3KhV+^WZ&}(va5h6RKVNz znFnZ`#IWCOw*dBR5a{o!(>^W*=|u}ou|KQ3eJ-$spn!Ct<#clygCuW++SvTj&*p-& zr3Ad}zi=Bp11_q(u?nzNNpb-eTuS9_Yx~DR(4OBpFNiWXgAjr~a9C(M{^@Ze7#fbN zlgu@McLNm2V0we0yr2GDYr;5O)pPce1~?Es*!vRLwmN)1_z$~~6>+uX4|Px27JmQ? z@zJqgxGMDipZj7^JHJR-`AZhy#5xxTac~?_ z75V@iUu>W@$_=~%LQtb{rMYXoGPbX*u|qOqV4Naib$&s=bkHrQ!{^^K`Xh{GxZe(? zgUmpj`0d!e{}aW4LsE?wb7@& zATJPo4z{5sfFJcZ)LR7+Dya+P0z*|b@cz1imy2^dUM!O2F!8;m!L8Jpo>;Xc(ZeYJ)-9&HFeBfPlr zV$zMav=*XX`n0HiAbMXtk46tuUtg^8 zXkoHT`TS0=KjUwN&&Z!C{7<&+eG_Oj59+(b}z z8v4@EHm3>!WoK?LL2b`gkxJYro+t4}gWBwpXYn&lS)NjtSjsM(Sh;|4Hj|lJ#!m=_k@w71Z z1vvA-^e^Rw@e^!-%0$$@Pw79E@8svo>-5x>AL)6wtw5aC!7*@>n!FkPusV{W=AACu=%#wL&e0Qn`*^8EM8pN@GqlEpE8WHQI}W*Yf*OAKj^nY@sVC7u zE2+=nZ754z40k<(EX_fzspTWa&C|$d&Zn8Bn6W1%obi)O}j&1(WRg#^W8#n5JRYORJ&o?@JDpV z6@vxS82^f8M-9s6Y1Txs=k|L3Ap7IY5Q%g)hWT=Z3F#}q-Ri*h`Ij6+5jLu zL_PzhK%Kb)$$F#6^Sv1*o8pSeNd3VGPYqZsF~!z*ag^Pvx(y?#WWrXc4sc~dZil|f zek7s6V{I-vf3nIYy^=rWl|zu$1A2vF!P}E)a(#LI&z89ov1;|1dB-T(sbJqE@+*?+ z6{~&=+6kMU)yfW~gK^n`;8`7EGx6vEMKV?uHeKdc>tZ_Uu{*BDtJiP+YvJo=q-+xI zdNoAZ=4k;CmAD)TdbKRXgJy`c1yS(I`hQ55IcYYM1hw4d=Q;kA$U-Q zsjLvyxI;H7S+(WwfXx73c1_$R|76$lo*C0f|K#@#0OlREf?oka?-8%_65j!V+#a~U zAT5;zVigDIR#sj41908Bfuh4bu^<#a8GQ{e#KPcAs+2SJ<=4Qm=jHOJKJYR2sHpD> zC=YDZnK0Q->#lL0%r)vJnid;J=S=VHXWQU~_LE&n@R7e|Wt#HiKlRKiUC^7zcuk zb}Ryq-!@XRMyUfdSYLh{hP8?_1VpJ^&=LMB5=^u$J@`Y=Z;tTTZ_O%Lw>U!$AeG8p zB(^Uyqcf8qy$I=yurZ#`K@yl2V3OU&;oh!TZAOAL|n zz~Gcn@=cYz^JZeeHgfRt1V>Jtek9f*AEn5N9ulk zzXxEC#SkGqaO(*!CxMLu`L@sdz^WyZ9jtdm2mmL6%g?~P7Z|$%-VkV0VLs3U_0+x> ziY_()7M0d=83x9VGR|y{i(yEcwnST<04&8uRLFqFN1PnC_*J5feGq6hN?%nJl+4tW zyM1G@DXA2fEpj!c$?*?PwuPhA;Qykkqy3}d6)+M(gA7fYBV^1OblIdiF8NQxw*eo`H$D8seH&0FFxZ0hdt)$t2CAYdM4H!$2A40 zIlnO@-^xfy%7a>epwfd!0`IXtx1?Y6n4&w4VwQ7?L91r-&wv4ms4U9^KE(?@qLiDP8-@Cb~;=R zyf^3Cld(066^n$x7*GPmZB`ZmymuN=!rphO@vSt9eC$V7#9Byteq#r26_35P>TW;M zF}>MrI%UAtUydj^N-G(taZ#KS%kFW@yHy;@C)cEzd(akmWz98qAc}Avjk5-Na(Yjq zyo)91@2hhbRW(58Ya=>q4(g2=J6v>u3Jpds`WwhkGjy;y(f04*+_;T#651~dM~5Gk zW%&Yj)H(mop%15jHG+TYOJ9+lAsJcs>df47vo9QY#vc#IT{(818atG#4Oj77U8C9U z9ekFbZ44DZV0DW*;L;PY5Jx=15EgEacVx#Ze#Ll{QO_(XPM4}EcuY^W;El9^!#M{; zS$`bPZT{1dU;q1Ul(hKw0S=Y- z7u7FgFDAz7jau`R2fL_PQb_3hJD;{A05Tc@<SPF)>=KIm+0fe6}hux|j{s z@cNuHD6?TCoQl<*R%qkW&Ofg4DtUg$b>%`jfVg#u0z^xUt#%j;EK-f%NoaI zJfIabX;PqyFMq36F4hXx&D4%QsS#5Hz)9L)wp@C6a(&U(_}^%yuHB|cmH&L&5HDkg zzj8`D@w6j>9`oPCTDgU)JAparzpProoP_Eu*zm_R*?UfXxtm^=L-HH868JV4{i!)L{qZb8Aztp>n?8e|^yPw9HBN74!+xKm4 zf3?5@27(0@<3216x9Nfv+g6K9>5R!26&EkDZ&?nGT=lUHk6DwBA z-k_3R=MbfJTHCZyzaw$|3K5;U*~t9l_Nm7tyA$i18#9~k(q!tU9T^kt(hMQ@ah8IV zXD7>(iOJEe8le^d7`0F7B!`lO?|^bJUn$4(*+Bdmeds$l@ZIK`H`kh-X)S7MufvWX zzw^smzL9RexkBD5S3+&;n(|wW|wj$+I(aqI6q9_ zQ;!%SZqTvQsKc@>?b3jX2#-^ndneYngWB?f9t()s@>_xRYxf&o-xS{Y9-pv6SA*;Y z8#}p>&7Ir170iXhn&Wwcf#T_qVoI?7V!D)%x&vf{yAxQt`nO$vAbPEiqP&e@@nsPPR`2|8RvtP$_JpB936=7)xS8FAllKmtF1qH)>6-8|d3Q9Z$ z1=SPUp z4&Rnxl=h>bqUG`Plc1(`b;7gcE0UU~-KP{jfsB;?@qpa?X>=Z4|IN^;s@W>vg*|#H+@D2KAJCTWJy8eQc#70#-YyIr=S&3_%G5jVTYer)ad5& zLVc+<{NRj6u_aBUrl_+#J;Yym?%P2Nq~Ai|xA8Cj+jQi<<}|c;^X4ZL1r&qK5DnUA zczPZ^GrK~bckBv0ttL;-I>eZgG&cGiPmj-N+2TLYGT`CVw0NFP@jY8TKWJ?Dc`(+E zKP5KgzDZ!DL03c`J;nOgiP{8K2+#r;Vi{TwK%#>;PRGQ%54i*5ka2l}5NPg*MohOIfY zhEdV}I+rFzmBI{$?bp41mQ3w0Dr%%X$1KD`XjOi%sHm%7#YNpE?GKM3_*yj<1UGO4^5qB-b);3(R>B*O!KUiEmq}8za}P+Mx?V9a zn3aM`{ya~Q;FfF#Nk*7jqQHjm+mw^Y@$*vx8*-^&yzgk(DX?9rhL^X1~b%Th~^W+`52V~}+ew;N~gea&q=$Wt@!P<=EuQvd7`f#hrBN3v02qgPi zVM#Y>O=z$`KA4Qf@FU?|29iBKEL?h$-1jrsfzOps{-La)A}vfC$nK+PGZ=YUM&R(( zWQ$s#Jd!^YAdom#v&aE)8U7UXZEzKne&Cmq8RG`~Cx^eZ2W>77(+jZItHP8NKyyIS+wvZ8lFh38C3$ys z0Vl5uH$z;8R?Tw>o~C?xhrG9bZ-4|cdT^;jo40sUYg`TNUMw=WoFq0pObUMRFv=!# z(h@;ukH>y+kD*9g602yhP%laK1;zL&wl<)i!Yhy3f;IhA}V|C9s{yNe`>rmllE>yFEtkwr{Jou?PB znJ;zp)en9Tu=4%Q5@s^%z~H<+OUt}uWy7>u2WH+AvOGbOtCu`Xui=b$<%+{dQ&9qy zaO{BU={D)({zax1cwuhthe9+#wcKek1tqLaN#-~!EwxaOUZIKLu@k4GemA{oZ)Qc@ z&@*}-P`kHWbF1dr?)qPmrwx9`74-G>JKW;PY6PB1L&b{ysHIYXCfIt;##@;$k5y?u zd2%gGW?kjM_QHZ~Yinynyr|U>+xo_aS;6$wDOEDX;o@FsN%X?KmUfdxeR0KMope?(9!*PN@VeO^cJ|fS))6Vy2g?S(B z&RJgL=f7nvV%2ql4Tdab!@Tj_m~BlEvr`PK6?Yi9Tw>K7<2YV@UtZq7%d#bgVw5D9 z*}TwbHSYP8J!xE`mhTkE!c5Q(p1qaH3Hk-nqt0&Z|0!XaC{mFeC;_wU+>)_C|wKQtc`r%4C zA~2(yO&h3-M=oZ9)GzrPOn9fl8xRNUth-B2zIM6ubN*w#heT~%U5k{B@C2Y6{vYRz zwvTNGx;^1bbOVFl6D?pgP>?&P^V6;J&pUycrHaY(L|Ok)r~2{5 z;1R5c_x|4G;gFKiEhcOM_BcCq<|-B73TkqGxSB~~K}X!JChxfb)XU6rN8C_;dTP18 zj*dB+aXMV#bOasC)t0PO)OA8o0+F!E0(0Y{b0C(tr4kpdGP^c02&b3sgSol}*KS5gYl7m|}h-2S?0y_K2hDAJGr=(W9^t~}3|@*;hI>V#a+ zedm?B?Y36F)EmfwJe*wv?iB3Z;0pT1A#qzNOU!PlV}HQ2_0-ye^%U;mei#bRE4e-9 zqCQXPKLE>DZI2QBTa7Ca{Z_d5* z4+OX4M6k^-38x98ll1g|u#>|#%@u0YlPdi!5M zW8_7Jz_{lORX+@}Qq%RlkTbgzbzYt3uuEvdLY_tQyK}`3qvEZdonn)3Of9djF%^a$ zx7W}Zzmq4YULX5OIgG0}A1LDq@75TU$D2U>?>F3zU9wmkPvWt=VKZ*~;~taeV1^$B zOk8`FoO|R?w2EPjcqb1JwmTnIbN$B2NStz`8SA+;0;#YUnhkn_T(_RR-aSoU7xRTO z6Vnk{cg$GR%Z^7QS!&S8471XT9jkKb)6f{~{j@lOsqt8ua3~1ExjN{i%KCKJZ0jL> zbP3xlP6c~*dy}4X$<}GOh?S?b39501Iykf;{+ZMwcZ7w7yT@`0Jig#^=H&K&GtT~yU>MT6cKM^$HA_3&)GeSY z%c_19_+B{0DK#+mPgd49g^vlF;7{tU;HA_Em1M1K$9%1818K>~lg7dqA!R(<B^NsM1R?q5ou~%-mym}IML)UhmbWmTj{nfQO5mv+ zR8-QC-5SGn-UT{KzdrP=--t@0K(~7Cy4f(?tV0!egmkCMAySYF{E|d`f9G;2o9I=- zdGX{lk7%5Y6(>eM?8&C*j6vDN=S+`a9RET9J!?Y6n|Z?qSN%GT!mL6!Bd44Fn|Ssb z*+RM7x>=}1*YO{j^LTD>W@oiuqOYiHM&lTKrHoGy6)b`FPG9PqlfoJfq`de;$0^pt z=)0rP%j*r(#%vyL`yOJ(Sf5%}Px-?=zsI43k77KXFKX^{eqwDd~gpilXp4ozuzUXy7r>K|A)H1@r z)J4-1tByq@oIY^UFW*wIAbwgKld*ZePIEA}c4|rY3i@%zpvT-sf4*arXtRy=56C)t zSn^SkI=8*ueES`r#i*0xSs2pZJ~?Jm8sQu~A}$_m^PGA$Q_mOtW8V7sIq-Zk)@p-4_&*%pX+?M$bL55Aao+wySVbn>1nG-n6Tr@&D4L zfdRI+o$1X4PXBkpauE(Cd~F38C7-KZ^&&&AE%@fBn3P)IpZ02TC|8bTE__-qd;gPK&MS|3}^g2r;SEW-^FOK?p(b5O1s{)i=z1>1_9ll=DmQBB`~?^17w-@M&|$4Ilx3+N*DpP&|8`?SN;Y|A$B`Ku8mayD z7A5RT6){NKd@g-nyUfMTHDY!=EZSWz$ucDtO|;tRml>$mC{SJ!)U0cHF#GX2r8kGi zb6eZLdZ}voO%Alq*_=eo8b_b|jNpgS@>fy$UROl)@%E4Kbi8iVC?XEgE>Jk|Wd3L4 z(1Cfm6#e>T8{j6`h&)!gmsV|Gv50(LZl5T2|GK#MKgMDem7hwhut*!x#pC=wxNdF2 zk78`?{))He-QS~0 z778D@=(!ny9im63T-7cUCL~4tq9S;%d5k?*UZjbOjDjb_HEq?;-%I27&sF6&-blCi znVHkx+K&ExC9mn#+lk%L_4mK~mX+&2%uX&|sX3G>)QH37Y->5DC^}wibMVbR%XK)} zSdXOI89MfSCx;Mt*z)C&5Ittump=K_#$yns{qJH<@m@w&27dF(nO)4E?=DJrKVoru zGK3Xyai1kF4CED5w|R$Pe-)W2)dxMO?@+A&swBrkY+_{G_dfu(O$)e7%+T42u|8|f zte?ElC?b+g!Z9hw{v;erPLc98z#}9xJ>Z+6Cd*I0? zhpGj3ceDN6pI~9}N$;&51;*Ai`B#dEcY3;CNzhBIr={}wPI%76yJOcOqk3T>VN%Ut zuYA-|G*zt7VbBLdtXnK@pUJP7_<$>@5hAdy5TbLd9f%iRIIR5S_O&lBx9+`Ewf2Lf zvr^WYf!Of^Xh*rG17Ir+JuK?A6TT zRuIIBm(d+TxD}RSrByET>9Nyqyfo8{DE2rwBRI0KXO=$wet>q$aQZ2(=+ZiY;jl=5 zFC}!}$wzM_tWM1!#l7ft!rwPd`#Hx=3ow0~#DnsYn4D@3ar^Ld0*_nxvyv`VOd#`i zPxc<}rXEHpoR<79gK?MH`ejB?z)MvIR-uNfQIW&DbE(4H6JCXoRbT8hDZ4w|jj}|0 zc=vt2zrK-rIOhE~TmRO6+N4{-=*h5mDBYX`)3oUb`NMyD3Z(|;suxGf?35}#IrNod zB~pC|^I0O#|0vF53R59Nw>Nyq&6Y7)%1y)}{+3ywkuPy`mhrW2-s54Y*U7Oz6`1RpnW(`<(>I)!XiZ~G{~i@S zjGp+6o%l(9TVZ>HV{#|ZI$I8qm5#Xc$@hIWCKiFR8Hrd{IDQN^o>`0@rMX_=6vNp) z#wVSU@_4TO(fVo0OWwBYr)|Wr%4ckQM;7mynVPr`yFnrdB{#l;>m*c`>r#51;81wcBus`)3#U?(LtBv$Z zVOnCf8q!O*B^R&upV&95 z&8gFI>!zXz^Ui(u`R)TJu@jjiW9)uMeaP@l>Ecf93jV%8{lX{-9@VZfbN$nQCrIPC*!e?`Ewxg-s zVYH(nU-$9jdzQh=k>z4iriX8juN*uaF13loW1mm)C>-ADU0SesJ=>X>$mw0368d=TsCAHcQb$2KQ6Z7_U zq4d4n(mOV9OSwHNundk7HiQ!SIN$BPXD@4>6)v7We3;gbP0RZ0vdzsfzrn+}GqOZv zpOgdY`TQ2!Srl=Cm*!_O*Tjo!G6Va1#kTU}{fod1z_%E6;I`)z0vf{v(O%`)kksD~ z5&NtsId5jyE3n(Lzb>)tJOgVCIfYd8`p&GZqN^J%3B;g|(Cy;lg41+ftV+?wJRM{j z>>oo4!{@q^BMS=N#W>V2^;%N_4^dI zp8g$rR-v=7MvNK@;b(Z4ng_Uq&zbw!e01V(?-V^VD>Xg1t=9fX=qw$=>Nd-^+-=$o zmadp|QDIRRH4`6syxqgi``KTkOKA_&2c94QhFK48sJ-HRh|?3^D6LsA;a`w5y1N_T zR{lkK*2~2BLUN`=L%dtlBh|+KJa=DCE*83Z-1g^>XQF)TkeebkxyrLhPNO%`0(xz! z2Y9~St%`a<_AODXuG^STo7Kf!oeAd_VAx`*`^U7x(l#xtTJ$NBQ@YYF=HhT=whX3q z7qq0~+)OStL4MgtIWYMW+E2O64j5gMIoO%*TwotTCL0S&x}HRoVCEKzJU1+Z?##RG zH3ze*p-||m<-%A>{GuO!_^g6P0`7#ln|ler|Jcw{#-QKBzOB9>w*t{2lPs|19%*sB z8>@G9rO_W?d5pD7S=bJ>PIcwq`unWs8zkO8U6Ug=a&HhgW#vbVc0^kpMn8TVV!sgo zrW+m)`h6f&o%DJv$IX?uTbO-#<;?o-T;-d)7g+|*9AL^F414>Bp@`5aHj(eA`ZLud zwXT_K*oCo+sm9#Ue^&7G5b#7yqB-EMnDYKdtxiq4!~RF3$X9VgebPf9PR5yXJu~$6 zVF0*qU+mbtI>a-+InJ`JX$_nVteA(-WQ_?9!~2Y(7mON18*o>BNSr=^8-JD%zAC%W z>5Ggda38Fm=>6owu)4a4<-SSwEQkts6^!TXI9$^;`lT07Fmm0POL7SXK_>;&P80XS zmm>|44gcnwe6h2dEB_Ni;BiyO&<^1cp)8LkD5%Cn;cmdZM95)=G-)_6`kjFd*aIxUs`t+#;72gi?9eDLnw zJH;>pi@x}4GZw?~yV`aBSr>dDHMV5~Y;lr7>09FXxuAiZ`cwWUh}UzW zbl>R{7jmx;*V${hdLhkIFhz!VNnUmOsnJr+YM1GNDiycnikx|dG|x9&5zChP-2PD@ zJ{~n+Tl~y@giYAKRM*0(FuW~)PfqJ%VO8m(oDrYsWgb5#Dixa>XXHARR40)+U^}s= zOzLgIOLC8aIQFr(QP~3FD!+81qg7fFDM1Cl)<0kT(4Ri5V3p3oW}`zfc~AdBVw_5x zULt1YC05)Jwc_2%Z_DA+MN2iz#M4vqaru+O&}6h?<2}qU%ju1lpSBCeKLUJ?FPI13 zq1yRDsp{f>$+RHx+Agj{+qhg=SqV`us3G(7{e~Z094y{`Vb6XvD6kVto!@F% zu3*2ZeRps2#D(}D-GNj);4@DCtPcZNe? zkX7Zjy(`RxckIAP(st;tVLJEh$9|5}4}xf?I3m7oi1yyZo^TVN9)7XfD85!Us#c>XqrY7;yvI;$ywms!u{Kz`ge@uwsl-Ax=N;+nPoPM zF<92>b3p^HuwDoRiHnkawuUWxgn4^~&-P~EOKVY&_Y9rtu7DtBvZ8F0QGM$JIeHVh zIivdTigKbpAQoHwPDf8KvD*tX|LQoy2d|YnJrI{RpB?nwA>axvW?CXFYpQ+nH-M(O z$J*~nSh9y~W&P#U!~LvXecyy~k3ZjoGP^*KiH{(;79AZun`d0s=~Vl0W37M0aXfWt zv?9^LI?)a0la4t5X`_^L#GQD`J$X43geo36y+{*$9Wt(=I)HH$*f&hRsfl*lG;9rI z|Huruq2f}Sp#4Z^;=Y8%Qw>4j@~G-Y=`Tl)~VN-!o~olyhrr>f=h z9_Nd6i+$hRn0HHc<=#x}$A|gn6{1HLBlTO97^$m+rJ9!1FWN6|F`;98nzDu^MKmXN zewl@d$>)Cq$(WUQsNQ#h$R$-mrzytBB?K#xKqRjC#(wy4rs{8u;mqeqjWa~|A`mWD zX2m#}O9LgF0fMTtYDOBcO`YDvRq%z?_^L>{DYErS?AwFiX>OYwgHWil#eQRBHqj~O ze&kg>A`$gpEFj*=EZBQZb;-tH8hBme@&zA#dzDyQ=d)6U2yX(;V}a50#kl6N^54I) zh?q~IQmT)?JTXlvG_26L{axVt^^T4GeQ(K`a0SI~nK9RXb<2cAE)XQ!3=AH<`|H=z z1&`g4ag4prT#JmG8*J%IRsyimZHB*^zLLxx>>n%>ux(LJ!7&$e?Yb|Gh>7HMX~GPE z*R%Z>vR&Drd=Ek0KB9lDjCJS{fz{;2N6EW~Q?D357xf5Vzn)w7j;#=;9#-l0#{<2= zNi;pq8D_6}%A@{l z7!y`#;Z%iqz}KQt(H(=Wzb!I?Q<5&TaZLUFGf16WPlphX!{XkY z=DZG~{4bK_HM20_KW4=iH|HEG#;+nvO?=~DbO#3qcV1#2vAn#$3YeH6%JBPP@76*$ z2%&yYQopnKwMj7y&yCtK?G;x-x4C_P%bf1(jh**Rmc8OFDK9L5t#)Lib*;d^RvVQE z42cU6Plkd>ED;01vs0jmEjWQQ0e76 zy`S7+Y9C+eH(UXNttQnN(#Zn^`y>$T*h39lgs8C0@5QTfw|_X=)#@5+#sl-L-?~ny zAS-sWYZ<5|6a4Yp$xfEy>r5vD6vHyx+uJQ>JK|@rO2RCRwX~kb3`q}aO8z~&yW8#S zxGaT9oW`H6g-)tw1@1EJZ=uI0yRX3FP`IYk-<6pO{6BS^x~GA{%8!+?s*?8{5<=Cg zlW3pL4C=a+0+w!>jR!>2f>hkw<&E{f?H0ejnr3z)iN>0pIPPOolY+xif)U~`{=VGiW)}0{MKBkhH)wbzc+O;@b zl4ac!aMw+t44950UR(CPc3nUr}yZt zEXcQ}`zK+Ub0*dbF6JmVA$3Oc4J)v{j-Rg>JSq&s8FpUke?}bOwS{eR+o96?rQH{= zAy3No{>2Gns@?2tFa^fM)&ftBw3qeFhYhr8|ELIvDXXT*!llj1`QMMH~nnP!X3*)^=*9Rg#8n(#!l8{;L_*cxwPhYr3IDe|n?$Kl*Gme*GI?8#_9#H22sEfT>L7(L6_W0jd zP-|Aa%bU$dVfZFSd=srK0n58VdF=UPmrbbk_EGBxZruQN^t@U_?(9d9{7&aar6KaN zQh(=7MsQe(VY+0IKb4_ir1joO%{zuWJt5bWM|i#TI)6$yH2}b8A`|#mKJ4`_|7YrFUXX1q|A}Z|OYb98h&~01`;N`W*ONn_`U-)*Y zQ9|{1%iBQD=86-W)~;^|M^3t>NJtmYK8(Wa$qe9pn6#KcN< zqLnpXSYuUnZ+xOFH`ms?z3od~rtO;QhKZHupG^)Q`I~>9Q6An7fopyh&eBX30?2|~ z=-y1{9^lr`udX(z6{*#8{p|g#xaRg=q3D&v0n-$l3O(<{fJ1m2&Wj5jbCB922j@k1 zY7+hVOzI;hS@soqSitsO_?w%1y$Zwx73&?a2YV~5ME8#)dDt?y!c&CilZTEQ>Nb1C z-q{q2!qQQJC7sEaEZt2NUwhhc?ZN0WU%i`L5Bwi2i}`aY@5LB8-a=p`Z2B&52*Of* z52~`yUzw=;R{Y?o&HutZfjr#llXp0=r^Q3G$q8_taFEna$v)eD1owDG z=|ocS{spi#If_;iJdA=W1=yCbQMcO{NH7h5VCNGk>1)jX zLm#D6_&YMk_K~MCR|No-sM7HzEl#L4&lKQd1A<~v7MjLS4q#|}@t?-)0Hh20jRQ~^ zj0ZCV8Cb`I227ZIdj)`ENSzxffqhJ=s7eM#gaf=7Y!ue8wM70*`xdkg54Dsa!%6^P zY_G<5So#PhWW)<_L74*90New0&jE0xoYA7IM<^lM%K)~<=ii)8UUa1{uyyUadxRi7 z4w%~eDj4jG!Z0TUcJY4-j?1@2k1cjG0?Ge97>kY1>J_=~9gr-Nc2ZS>;5ZO=z*^A{ z?nE7MpZxWOIzV3;g!P&neU`ZnQcI=N*5c%4l>sdoL5NV#Dq6|f3T#UKmPFF+Iw zVjc+W9kJ2}{Mz$@(;t1NPM7lMdh2M(M`ooEpuX*M4#&jVc4 zJhq60rh}$FQ=pN?_n`UZ5i9ioE1f2LM94UyGv`(Kdsqs(j=u7QGlQ9VJM5{+h#xTc zDc2h52S037HTrfKmeG%=h9q}brDqS7Q3)szPyx0fsPNJ57J zlB;C8>+zBF>VP#w^*i1o<0yHU)BvRFN|P&jNiqO2=9OKtC>~7)vY7zvN8OlLDM{og z{E0xiQM4!$>JUr|fMZnS1;R%-rxqY{Da@AQ&;EnC`Jcx7>}{=`B%iO@TDS%7@9)1JvbsoKuLuN~ss|_r#W#xnAPxu_(r$rT*P^fsH{JlCUka`p8iTt)SkP}&jDp1B&PXOG( zH4u5~e<+GAa|K%M&D+x^HiejxoN}qkoN<(G@W{echL1@7Q`)ezu_0jAv( z(b#x*t*z&azG!QE`^E#Wx|tf0RPAn?vGlon!7hy zo|)CxEqAzYt!F=6tR(I@_K#1&MOl!zV3T?A6+1e9T|mHMeWtZ{_dVEYPRiU%ejp+1 ze+mz*m>|^C2j)+T&F|}|7slfDTVAhC|4ft~wdzc`LVx~7I53n{V}*<_mFym&`UI${ z*s!f_xcSWj;~LfH&z~3P70UpyjJDssi&Jtyhb3H-sl+{#TpFJx#jm90zw0qm0$8S~2x?y%$0-LMi>Z$)$JJ#zrFl z(bT4xy!`EhQLQaTe0aC9saSBIpzf@DUYSSG-<}3(5MpVOdU7!@9F~U&FXTdNv<;!h zuo~x+J>x-I{odTITcH%_=YD-j#zlIn2ZS&7$C%SW`UrLHBjnP+jVT6JBACcdwxBevlqw`K}o;%Hu zn^?8D>l^$a0OX{9%QEtQQ@BdA&xVaZYi?*mr{jH4>+7OOrX?rozb+8O^N<8M&^p-o)>m zzi&=H3+)Kr+^ngd-AvpHyygdgNhL`q^z&K#8QNd&cWIPno1URlqz5m=&y_CmI0)C= zZ=3Md#ha;Yddja*Hr5YNuc~(n_LjY0DR5Zdtj!TKov5xm8&;{*CTqZgf;p*{o@&21 z^%fq=t9$Jw{2djc)oC{N_f}{6Z)2H1mJvx8_~{U-10V9cxOhLVx^P;lm{3g4bbioR zm~?S8sYiAiHF?jN)BT-oOF7)$GjIEPgDMolR2y<^5*F1Fq?F~fiA zq8S+NNA|I=AE`ZVoe__y$eb5*VQ?{qWi5T{bN{ZMz9QM}Fe=Y?>oUKe(}$<`g&Z5l z#wfC!)TN)iQ?`w(5Y=@axzK^bsH}!F0JDH&fpQ`#Da@&?PKdFcnlP?9A^RP8tK+J!nx**~+Z5uWOC%DHP$xKXqpEGM)1SZy7MKL==* z*u^Ppl<=uEK0AWl*t5*eI&Q5-R0Zy~wEn&+tWk13k9P_fS<6XRq7#^S>=PQEKRu5= z%_IKsDR5E2E9os-GQNzt(T8M?kR1v(swHszO9L72Wh zQxurN7m(_9y<bP&V9_>E&iHwR0AQEU}GX~@9`;xeotE>m}I z*8NuYvKqMCV#gQuHJHV_5{C-jIyo@R{j8$w@_cl?njD?3EKmYV68eTI7FM2R@Q?p< z)MX6nqA&iKZt{mtQsR$@Dwh}?=XyZgfoz)rJs=Jb7M1T~KC$(bpG#8T+2Gvh__aY@ zzl#8ikBpfbN9zN67=M%9>j!RnfMW%VF^l5wz82xYvL}Bu)>?4XaAY87sefrd0J3{k z{iYR@xceR_q8HGN#i>7G}|_ z4iB2EY}}SD!^S9n+PKg8<;>6lvRTH>DUE3QRg*D?w zmo9=4ofF0Z^I)K~hwqp1;NTztb)czZw|+c>!YYk`C8mz7aSJ9aOjNLMLSDZESk19L zAL)da4w?b?eO~{^eHbVU_&HzRExY$1@Dv+_Iu9%P>|x0Qs5$u`HC~S!Y}33RXFP6_ z_E^3VCQHaRLhb%7%S3vVdj2)pMNa7CjG*vg z+rzO>av}l{^?Pz%(KW+@?;ednj82*Wh=fSs_(Q1IKR4zNhS_KNP-THPD+YAgXEW$m z8Zj|WJ1yQ}gfp`-ulaFql#C~;rLpa8ZQli&zFpzSu&}V%X~}$b)&x(_-z~8EV6^V3 z(ZL#rcAXhL z^Hk&7nUkrRc-5M^zOFGdjp*7HhUSWD1ADywa#5CNmqaH*7@+mE!KzOcDDttMKmSfI z(6Te3)heGcHs%EPpLlVv=EtMMHx><7$NhH<2)>QM=%52GQ%UM1kk*>Mwh(a-AdRD9 zV-v5q)fN}`frJ$>$$;Hu2;7=Gur-jyZULAj^B?coW|7IEnhCe>_wD@zFlDIO9Z-Ao zb4_Nwh1UXd`vXC-LbHDGF!`f7C=luX;&HG12ifj>$p^~O3cH8RNbUnS5M9|tothd& zvX3PJemgFn8zGk=!9M_kK0LkQ_@6(M0}7mSs*27-O9M!J0Mj!ba~F$I+v zm^I|sk?H>eoVsn-?cNth?shGR0(fN=TJw|XxdrrC-0cp?StB|6d?5V5CzeAlvVzBe zd2W0w(FgNDH9fCD5a2}q&tU{v|>6@BJkNP7y^ zoaF#zpOam5nmn%%xG;=|F5W%?QP)u5hsa~WqL%cxNVQ))TA*)Qbz(Bf!v87|UI*;* zt;Jyxa^FxeQRqW$S~6p5sMK}&dJ_9gxyWC+fGorM9^PgleFhlhK1O_It|+3`0@LNFRnGM(jso@Q|sC2fsv}y3YR>@%ap#kQPU) zEOM9v3ew~&4|D$)@d39;O{tmnk?gjD9cZ;Kx^W~Xw4ZMPY~F*P@5sxlR0ir<6VY?# zzlaYMKC1Q_CcDXLps)PA%@)g1#0Qc&{bdSqQsl+Yj|KAb*VmmP%n?XFO8-^?viX%C z?m*4-RsdAKU?@@n2rkK`OA@MX+1Oa|J@k5z{kJ`~-H-AZ`zZ?xi(44eqi9O}d8pXs zg|I=X%5v?7hJLYm5PoG6;fUU~%mJ~^0h2?Dmj6}1#9^Eg1QohavcCr&o3nQj>;1*= z@6HK)20;PmMmjzffFLp-$bOivJjx9Ui#o1@n7SpWv9QSNyC37)MURoi0=eo6{gSDK5w1m7Sd(4pnVL@jo(O`_l~FC_m1dK_S8(EkAzXLGt|Tj|O=i z{%hB=oAR;-08GQ!%3$VxmPT^NrVC62W5X!BllCA{TwS>{O?lgd4bRBTS=(n)SoX-l zZPfrMSCg{AZvsn$?g@x9GCbiIp@JQdi|pXv8bKq8wP60O&)65B#N%%uhhun=+0O)C z{PXD_t+~2+pdteqGOqS&IWBetS62SV&|yOIS>9yrY~E6tj24%FHmJ)o4y%-~|HVYJ z)9rg;_JcQTqBHU;*QNIPh?hc-K}i@`Pl|tStxR_*MxY?V{g2)DA&oHMAuw~Ti}Hb`(4@> zcY&T$lo+=8Jes#`vRi7O>Xmr*f=9KE_g2d5bwic*ej#_S5?H^i_maCVz+Wsnf?DeV za4+EeR|hz$GVBmBNsX6m4yR9;&y{SenNG@I>P%1zmi?W&Y@MEE=wCR#EI?n6QV=v4 z9j6^+&gKh$v?8g={I3d6oe0g(l zTpOEOCT)PaT^zPpXu5kY@G2z^y+;AUk^?h|) z$xB*$v8EauR5qJLfeSfm5$u%Sb{FhnLtABK3=5ZfK%!$J?qq-Q)u~WKp#G>2j^hVL z=oZ@DCugD*d@5yh5xv$RtWfi7=Z_t@NQZ&hP%?hZev+1&-@fCt)ea>>*8O_nf3bj? zshyF{4CFIF(ld=477zUpf#;t$WvoGPUPeT4Wt0XKeS8-jkbHhB_G5p#8}7FurfJ@4 zM@mq&&J|qvuJ|Vsf|Mw>%w|>(3-9SO8D$h`o3)~18bA%z^()i#tL-<@52e(8t*d9L zqYPLPa+{gHTLF+ehP2e&v9JaiyJifyzQ&>Jr_9QGLv;331H6$s7F>TqIHr2>H;6!Yuk({T==mG|PEyD(iTvP- zebh%eak~E0lDjN=X9Se0>w$p^@lnd7_dyc!j`#Qlrj_>OmpV#lSzaVxH_yoQ?fBKG7`k1ns^Zvw#9d1FN zSapq57+wM`1<5TDV7c{p^O&tyUyJC&gn=(pYm&T$0UK&(cQYl5!Zh-%ULXB*;%$9x zfvLo^tn^-RaE9P~RYgJjA|Rhe7Jwky7Y=Mx<94vwms@AV-K8lJ-oP9f2d@fLBfN(C zP|V^nPq$;6J>*_zaPJtr%&&;0N+gk%&2<}WgEcH=>fnqx-QA4Jf6)AmS1Q@jba#v53aR(cV9^Uv z_A95rc5YFS_=D5})@a(6_j}@1`)3VzZnGiY@R&t?lQ@1V@)(qz>g%M`4+LT%%}$~i zh6OSX!nJ$bsb7Z~P3KRbkLaeBqk_EZUqs+UeQ+2pzf$R{9c5fJW<@c+qQ=`VWV-{8G+UQX{P<%xe@G`xSXiMwPAvj_W{HcOCj&afHh>)$ zv@akaAo@wru>7{17`{%#`c;<0{8J&;7wMh9+u2R*=Kh?vnzAc`OpU|tTRh>=*$j0B z?4AL*hG3yG6cH&p0RRXaF2M5o6a5<$AhM9Ho(+H?hz6DHUbCBig~UUTPGLGOrj~GE z#-1Pmh-&y1wU`!QQ7BCY%laO8&yQ9V0z2)Foyh24s@sqazZwmiW=U^m<3LSIbh}VZ zM=h%lfQzj6ryktyGUy=P&~Tm-AQ~4|($g<_?)-jZ@w+i#eI`=#9a^{!Bwd~lJ#(L; zp@8mo5nuxI(M|x|vEP1rmORxNo9I9v9PBaJw45%(!u6!5@WckDf`O{R-%r>axO+ zEqLIa?PUoMvmEs`0&-ka?PYy|+&2g)#~{g~v)~uxQqg_}!Ua{=99i&3m;CV~ckLJ` z=suAaISdl9fP_O}u^+6MZ7~5RLhhO#py*@Xx0q(?w_DnZ|W_flXaHwn0Fy}(_&S2cXp*BvlRxWIK%MzwF}CBNE1xnl#nMCy$bt zQ~&>&9;Q{0omn17fBH*ijUqTw*8;|wk9t0R`Df~W35`vob+h7=HS?T%?9^Vu9= zU%LMhvmXmFDYS>X8E-1b7n}YAyj00Q!2=z@HxT0Uj4rh+VPGxTFAj0e}R_ z1-gGf$jGHr%o(b9`)b-`4q&UrAO{)uq&-$Rmh#x~+y8)4=4S;>r$~#Mp?)Ie1H23Z zi>Ay)s0<8xlfk7M#wRH$x!!P$@q5&lf&%gOjwH!Pwv4;GyZ@KBS!h(HeVl>)GN-hA z)Z=^u0Khc5R9Lr_VEymU#_rC}Xi%|)VY~ZL>q~PyDNrzV-T&$BtN;2JU^;=$V_zB< zGOmtWOP2OXNDYDM=;*Y(reiS&4;2)@SbH{H;e;>?zC}7Y6#if6cCPl+@B9gt%KC1X z%7s}2UX#mN6J6aaWty?9XV3oQU03dSZvh59ykR7V;dM>k1hC1rQk#C)sG~PQp40m~ zQPtJf8kIYav%B>0Fb3S6MOF$4>>VmOI@%2v|2^P$^TjU?KXR=6eVk3&{fp#XZcse< z#h|P$5;%;Kvd+?-;g+NAMj!6K>ivzpBqA{rbq z1V(J=~lq>e>`QN2ArclvWofAPp`Fk#yl!3-dAfm)F1k1nozmnDI%JjVf|B#$CI8Qs3 zKRsSexK8IZ46juMst`N8dN)<}vgC+1r5t$JJcoqidsz%q>YeB5r?_N()mqgR7i(YD zOu3M}lEF+ocF*Y~UOTaF;IU8EYjjHOfMsE+u5tbTx>}IYr47{@8$OUMQ@PS3IxPFM zLRUxUGNau7*BeHaS}ES^_j|W9lr=u#e&CV2K-gRdPEG#|lkg}9s6n;!H=gjg%ymV# zB(GUgGRj~Xd|SQaLQlB2Myq=t1(FNw6Jt3tB+5=-xT7Uhzwayw@S8K>or6e#nD+9F zwU(xOObs4pVQvN$TW#M?a9{8onbCyR6*##G2njhlOICCZ$QgXty~$az{KjxJW7`}Q z!6;^GrY;X%MOGU_H4vkYHR^cAOg2%=763mqmp$9oFRe7q{FP@44X^kbDK8w~_GX@X z{6;(xf>O!=M}3x7B!2UW_$^A}+gTKm5QKg;mHjF719%LeePJ+<#V|gDi59wi{kn#5 zv&g`U#d#5G$JKq}G|cr;KUiDZ+gXUUR6Zw^_A~S^aZ(b)v&!r+s$pEPKK`a^+8u2k zYyahT4SU-x{5?S*MwAG5X1@+>_F}lYf6k+4X<)o<)EZZYBD41mVLD5RPA$TxB3e`|nN+2V3e^I4O9@Y7$Ny85-rP>)>=^7@mD zu10c&@Skjbtd#(QZ4Nz_1JGu@9$8SqXZkC&1dO<#187cH?fDT^7L_-s(IBUWy^T(e-VT5t@9` z%gJ{o6g;xyLY<==5#jGNUMp=qSly-KN*ua811*`!|zc=Y1uG z_WU@27a_5A(&6aUE#N!C?%zDG31Su`eg8i}UP!kt2*T}i(UIbw{11-L$f zKOlYcYOu-wfRXt3_IBXGGLR|ZfV3X-V<13b3>{gv>(3&4O-`1~wqz2-| zH(VA$a~;ZCCMto0iX#QsE;zr=J{n@r0l~%@jqf~4yC9>^n4>%?n!r&W5$Grn2k>+p zxh-<(_24#9jpl>X4&PJ#HwHsYHUaj8%o`8uK_<;FPlis$ z!~nbfyVrSV2tX6-Kan5*f$KE>|2K-Rdkl=e54Ql1XRWTUNU;i`ty8ivgzXSi@vjk&74-eh*Yg)_< zTpl*Jt?Ad;=}EQ?K@bPtMUxs9Gi#^)Cl!eBNQtcA&GF9QknL{U+CPHBjpbt%vk%)@ zH+MJsCx!OcqIuaVHKXvV*4=q&<^yBRy>An>9&SZtEscA>Bs44bHYdwIZ}k!)17;9; z*gtbIimu=C6WJ{4(joqh?wodSv zTid6*S3V;(5=%G3g?2x*{FytNF7J{E-Cb+1?GOwcdnS=NCd$InpfGAZaXu8$UV5%8u8e}kdJcmB2cgsCyqF<{y+pbeFM|h>IAJol;1U@=2*4P%?#+juwPI@*C!}Hiz#;cqs!)WOe z$B+00qHSa~3G^8M?B zBJe;`P3^Z^`j=|8a*Z-vw`Ky%_BOH(40iET4OJxU*32gOPrbp@+u_?RQ8mtwN?xiZ z59&|yTDjYIoc4+JBYZ2^Y_LQ&{QkmE>Q$PpZtz(g;Y&z$VbUjcZnyhwl z;CC-a?GemdZ!{Yvd`5gTS?eFGCF;BVfx?^6t;iGb>#q6E{h4}~ z-fPmSI?sK2)_L(m(`t(wnqccuGn{BqM8~FVSCP4q!ofic$xuD_JPh)@-SIf8{5-&2;=t>+ZA=S0+m0-cq^~N6T?Fk+H ziQe1aYE>$6@oL@M>~y5kWT+z^t$!?YA+Rb<;qF+vh+6^Hwn}JA(^1!6-4S46^K&>A z-WJ#)5MZ!xedVq5l>ekhr~cI+-Csv-Lo?_bHC|B?*y7CWb1Tkqkb|(PPxIin$oJl1 zOeMx}vR*UIzm91Ayx?SMBdv_Izz^jaU*;)07`ZD2l=psPh_^$~4yld{3PiDn)OxUA zYxnWVr=vD!ysT}wvi<7fH8HSlEG0+$Dd;kg~FAzMxFj~Xjwx?Dt? zDbK$$E%usii5V{P8%&dPK07q8N=B)L>^`;vI-Ug6r!)VUYor#eV~-&=?yNLPGlxax zPATw4W;IrkaWOC8ceuk?1qhxA>g!+ce-RD7d48h)pwcw|Mk`#5S4jt3jy>4l>5O^V zX4Ro96#U9yBc=xK%AE>K5MupNj-6ruOUzHfOTi4|$N2RW-{+4z4 zA|?$(yWBv;6a=BGb9)!3cmuBND=&fLc|r-_2cE5J zqhC{Vd&AeV^bnEehFFNkz^}LC5*3^Oe8q`f`^~h+aG%_S7 zMct3;Vz?A}$EJbsf)4T-*!&oAp55kqxl_Ywu5sozCAqvQVz?ngJF3iZb)m+G;R06{ z^XL&T1q%G+0(ArExMJE_qkv3exD~1(B{r9>M9Hn>R{9Q^N8B%!MGOmjK(!EBq5AAK zsTN$So2nc~&EW2m%@n8AYzp%=jY>LPtyzZdjohN#TOV^sNZY({&YHUsO)<%9sE3_U zGJNOu40gaR*qG3ADqzIISzMrLC&shbi zxKTz|S)r-OQK7))3O(Hd1%E6zUWFi+ycDkXB>huS!Ui1-J_&0<9MhO>UBUvLsw-9yhEk(Bsj&Hs=IaPtIM8s zv|_i5E4G5o295?)@WVys8M-bvtmQb+ zo6=L5d?*XraG*cTN$z%8q$WShs&5>2Ey}X?dP7cVsUrl-UEni%RIBk=^;OMJ*2|e7 zD4&@dWHM;2&0QLc8X2I_mib-tQ&?gU^i!gGd3Z{`$^7QqklV*UIiDGS*QTZ=x|r>n zP;#TOs(6W~u23!2&R9uX;eB-h`wDe5|J}C*)yO)3<2-?q+-M3UyVqtSBFDryfr={i z;VE>n%UM)VOa|X`y7=*u1)A4u`2{02QZCZ8iRGl5v{GCCaW4t zLoFx0@VKLCnFXbAX}!qk+}FdeU47ExKO=4*tPUE% z;{2=iwSOpyR(l)uaDPDG92iwHt8(!u^j9z}Lnm+EOYl|EsXB$;{vP&Wj)?>RO?QBP z(DvfHGTHN|t4s4;bV$@YPlwq9OZWss{`~0Fk@9;=NTt}oOJa)XTrc1hYKo-v1QJ7* zVl~8$vLAWUX6{ypW*Njd6a+>3t|c$kJFJj@=7CC!OBFL zVxx&0qB!^!FGWGI!WZ>0MGmI02dXwiJkn*b&oi=S#EvpKN3P5kXTi!8Bn_Lllh?C3 zzLA?s_35w`vW4yHOYf5s)0q5-EQZ_pWh*X=epC{T?C7yDh?PLDlZU*dsOM641tC%r zYVI~WA%RJe@0EXG*xG<9t$4s5?j(5IYOc_7F#chM)SZJl2z2^bp2C_hm;IjQfPP7; z+q<_Xi&|>DO}b@OtLd}(F7*l*IFS?Ir_k&jdk~&Uuu!kAve6*$Gou>@&3`J+JpLKc z*q-m}~twfV4l1tZUK9(f(M3 z8A88RMFSmyKi(_I%S1QR;{!jq)aQnlIZHMR29pPVX`5xd(m2O+71{9M!o^c>F%&!O zv2&PjW<37REULlZT{G&}+`K4sHe18Dv2FUa?^z=)58#QgQ78|AicV71HFP0{!{vBc zcq4NmHg3~|;|dOMTSuuixkSp_x2=EilF&~XR`APj)R8`hULU?3p{1W)Qs8hT7QV*9 z?)L&YaDJD9rS{dRnqtqL`=g*x_Tu8y{OlVxn|{-YtU@^0@eXty!((2QY@Ge_zlyBJ5Ykp?)-5$`Oxhf|dwFk)2^d$AAL zZ>V~-&OMhrD}8684C8g=Aq;aKLXR|!__Oo*_;sZ=p8d<5FSf-oDJ;R0Fps+rH7bQgdujShXw7@578EcFsE z8A83La+)Iy=E%%}e?3pybU}vm-S(-hQ@9mCqCt{KD9h*q%`lsip{o-PqL6bb_@~^ zG%3F4D$8F;z$bASrh_6l|99g56xf)r2Jin${9)GMgx0G!*#KNX^Y5g884>n>ED;zH z$i`xS9RQx(CTlN+0pzIzz)T$rqO1^67{-*5CM)cN3N2*1;p5lv51~M7 zUP0*JfW&d9UH%4 zCwT7?N4`23S?@uJ(ieg=d7Y*B^g~A#C*9>HowI_`2=P2^j4IeY;o)KdN4`9u<@=O{ zSm5JV@_Yl9FdHc}D{`{#1Y?3=47rTBOn(6w4C%zpX2iyF{=4|fqf+%BKxCFNQIu=@ zu%N_`{9~liAzF0xlM6@wMO5U`6KC1oryKnog?fgBO~g=}oY%C6!A= zz!6^hd4o{SvdN$14w6^D(#PdC=5DPY6Wlj;yd=KG-0yUGExtCAy_d*X>NBbRI#|Xy z9L7n{y&$~`{jktNZ6v99IdPglyx{;2BI@ceQSGAm=+||AHUHv6v;wS$EVA+FlPt4{ zjzd~yMR!=F^QiH9>l&e8^GwZ+2S%OkiuH?~UC>t&S1?SFqZ&I?XP0MY7Ys5y1r)9O z{U86R5G|eKhF~KVFiTw@!x<$G+`*TaZPLH>BA8wHo7LBp?k;1%6itUrTo8oP-rRpC zV2DFO$RR@#k4vXfMy%ggBUKL-8>TDz^-UobGdw_`*qOyi(7zjL4Zj08VDbCW1}}$j zj}=YHQ+;p%$BvxK?chlG*-IQ6i8%{isC#OCq#w zLCmy@-YO{gy_N{%Gt{Fd@v|_Dw5*n=2?P>>U=}`(pO3zKz#M^`PuuwP1qkD9-5O?& zh1cF;Y*>Rg%#_Qh`PyDEMTwv9#H$xH_HeCKU;OKEy*xN{L_LiyDg1RE?Ah1G~I1ga+h|FX_R2Ab2oC z+0N{$8OTlOZ+Wf1h;e|pJ(~Isquu{h+Lyp5+xA0-$u~Op&duZY@N0j3@#B%kd6`09 z>*}{4(Eb%ix8(>#?Jl6M71GJe^bUWdtPX)j=Q=+88i8OiEKm~5osz?IW@lb8eWWf1 zfp#o7-p5BEbYktgph7w_dzr>r>oTqoD7%znKx_oUA8X$Q)tmv(&y-cF--bZDSMCS8 zgE#Dn;5O#jvoqydE0wJw(3sNup#~9%O{getV-c*b-Crqx9|G0){N->l0-+HE9xria zXPVAd%D6+IN2Pu_AB#YQG=s-Pp6pDA)j}0t2o_D=pt!fG+lFxBw>M)<`Wr%rPimmx ztc2~rv-X*q{Y>QDK%IQGwerN{OynDbeT!908$nbZ%+6YzNx+ZLBuYD1>8q9Yo$ zjrGqzgGq}U3T=t@1pm2?*&)9)2_U$gzt4%!!QdAKBN~LHnSEQ~#|iORo8vC@)I{8d z-zEE%Zez%FU6x@KwP$j*wv>+Tp%E=264-!Liphav-DQ+s(& zZKWd9nY9A$%W}JbEGit- zW%_uy@J6hj=e|+ei-iay0%~J@LlSFrq;ES~7BLIGHA~T}8M`-Etyb#pkR}*S1gz## zR{N^+>Q>y2YGyeE3ko_5C=v`)8P79ArYikeQ0uCojty!A z6K?LTv5$^j2wZlqT4_;04Qz+CFaP|#HR0N--gjrhyKXG(bdj<1T;p;@k;moDM{QFT zqs7^bm(6bxqp7*0HlD^?OX()K$-q2P9h;6=)Ran6X4RGsTb(~vsS+`iclK=xaZ@|} zU}ds)#AVSc`chpSt!Qf3c)x)G#JYoxOR%CdJo<94U_JvLCy)*$Rc{pQw@$aDKOzQ( z^&;kLe$A?RG`+^kEu1A*Pmhc&zVwb~{`C5e@-RHBjbTfj??kN6JQsDdZoJ>fV5HAk zb4x2jW;Ah9mmTU#Oi=GviL75|^39v+Z}xa&$QN|utx@(2u~n1Om5?-gW&wPY!S$%tDY}x(rolugjIPK1_#e zb~#zgUtsnLS%9h@9H4yVugc&+#yz1p7BE zKcfrN{RxOpY4pHH%f{AwcV&oY(!G~Oo|VHLR>~DKn*MO{-M#r^q9NpE4>cvTW6rO(UK!$vGyrj!h*N5(zd8&ybJ|(XcR| z!#K?tg7uiJ?RzcC4ygdnt71<#m8wju2>g9@7l zDavNn!EVQ4={9h^Q-ZX;m{n)r9>wGBsAy#IkE!ppn6mcm#15wwG|EO-}Fu}ML8Kf(E ztY5zW#X=0VUDm3FInjBc&4nH*XRU$9gu5zrDEzD}%t9M9B%F5IIH26gsCdw2GejcQ zWtyZ^%+4M)YfdWMTi6aIL&Y#L2v4z9D7^c-3 zk)+)E8UEn9^Pb%vW89<1RyTq!pfa7e(3+d~O{c_43XCfbgFYoYQ|k?th2Jb7!7rUx zz=?bJyL!fu%wrb1H!~}Q9W_p5Dia7_qp*rr0Hs&#KwZDs%xgZFT zAuf(Xzp$Z1ffKz3o8x9u7KUNeWH^~Q?w$t4V`>=e7$82Db(1d@7}Bwz_tAh`(Utra zfCA5Hqw8}O3|}1`IQ<+9cX@td04p*o3N6Wk^<;x|#6cPeym=oW?qk&vq~F&MgXM7x ze}4nOzbU(40KPbM(&1okyYuaTyt@zZ?mpo!8UGFh{%fJXyt^{+?rKUW5&wAie<%LK z<$sxT7#IF4IsaCTADP6>(=SSP`HnwFq|TthWd&<;LZmy3mk3?K$pgHKuHBUKued>w*`OhknRHn*XM z7|oX`p5Bw*4d-!wzDsrKC7O@wFU^*?*@;%eXRa-P3LvRMMh>y}Jt9CcQlHK$U}hYi4iE_7Kzj62)Z#MG5wh)9Pk3 z=(o*Rv9`L16sUjAr7zPbW1~VFR^g9IgMSZ3T*b3kkt;m&Z1J|fGLh00p$9^7p~dlp zTDOw4o?1VFhcKB_74ygOS9V9!cVlC8#+RKXLX5qMY?5Pa(&}BeGukav|C6d#{*$VH zH*s{=vs4W{OjSjECp_JVej^-CGf!R}CcF>!%H84&GaA?;x7t)}zuoMeXy_MBRq}X_ zmD_#wKj+Ilr8!CwS2C#7lw;1PW)N|pCd7K@MXMi$wRUYo<=KsrqF^%4!7q1m(%0mbj`wVvF9#x^o^_mqQd0cFJhO9_Vw!OQU{b-gPa$?vnfO9XogF$HPI!Bk-bL6G%sCCeedJ!-zbEi(y;Qi z<3=ND?NMXROQuA;=V;&=V#vpUrnf3VoYzAac&0p5i(l-<28`v`c_63fJ6qCxGcvLe zwk;jS4GqI4DWAwnL0`v_{~ z8$PPd+SHRUQZp31IC{2{v#(%_;)p%O--SFL_9tE8?no~1s(ldtrlt3-Mg9HGI1~1p z-1Lpw>HI7{hBYpRHg1dHRM|^0FRudh!pe21tit7zjoU(}GbDSZg@ei0nOBK-p}>F? z;b`6@HY-H-#}MsL{s?rp8|5oX;%ZFv1I{=)bWSZ zj&^{W!Qg8r2Uz{&@K>3%NBz%2BM?ThUEgJx$;Z%%KSVeQe2UTMw|3F(@`3x{QXlnasYD?5)w}1OGLtVhCML*o z61LZ#u|a=oa4zsEozrbUgY&t6havh#zB7(nmAsp(mAcqbq#pYU)*r4vE_fz8(*tzB z$Pw7>GjBRPQor~Y!2JLpfsE<_ka!E*`%D`z_1IY0*7tk0@*ITm^>8-mnGirM+x8oP@Er?xZl22i z8-x!xPId0*N;o5mgEpdB4I_|>K^X0_O7;lEYgQ)mV+i!cxY>&v`R25$0!V)h*TVR3 z(YEVMWF{$d^E26Sn|)ur*_?5zIdjnWj^lV#ZyCl{3;U#e30K6PE>qUR$f*m%==x$+ z(aaRW!#wRWnSi$DwhstvkiKNx%NL{7!X{P|HQWxH*wF;2#+M}KjguPAX5y$!Gw0p- z7?ZO2I(lSU1J{BhLk}rk4AfZuE}ED~(|tSZsfS5M0?BN0{>XaQ27Z<)ogMqGrJkT}i*4BK?q`@%;DE=j#j!1D)SbhqVm;lld zHkf9fEN3hUI&$FZl6@D2!1jXNht!6$Q(nksApV!CkybD>?O?Vv-v{rXU&bfBT0NZK zcoKXW+2oF)BmP;6YvzxmGnODtb4sdjP# zv;n)8A(6ys_r7mSBlhi-Vo+|gIxOiSbdADcjzGI#|L8GA8)HK9S7m+=EX+nox&mHZ z<86Phm$bZG)nDsY+VBPBgBF3q;iN{(9ZKLhFZ=$0Wx%q@uW4mg$m=s}3t`a2Xi9x> z(7a$*(tqlfDVw{Iy%~z_n{Sk=z83vmyX5rC_9Op{SL>??1`$k7v0@_W+!pf+imLA!RFN&X5fdw*#|dctytbficeBvL16jnlu+ zgdPN|fd-xBH$HuO{`ISs-BQ=AJI{0EYoN9_79~(KwH}iM_9#x!`QUg4NE6C`b9vk! zr0A2WvJUQ%Ja@|3HU4}sQX|P9mOpFUMoZnlJak}s1u`!9g~TaF$oOHM???Yr&NJ>m z|1v0kfc2_R5_S2$@L5;d<~$UNA2O8AAX2v`)Dz;`)38-|GmD8l8o`4Nt<5Ks_5Dka0f^ePK% zAmj@uMw=a?7(ANn(Xh{80*`iYxUh);c!OX4#%-qCXh7yNr_K)H0sAyRshkiFdkx6U zApH&^CWoypIoCH%Gu=)BWH$Ti0uV=#v8aU zeNP!)rdKF1fgykDID`-AATVK3^#An!Ck0*+ZUPgQk?mjqx`9FixdwO;qx1RMU#%xJ zsO7^xcp~eWaBu?!Tv6c$ow(AccqFv`zI##$l2luW7wCgmO@{{7W`OGp`VUV?MZyqF z$4<$A)!6^zV1-=DDFL0jBTWHbYWshFmYC)l%_D>ZB4J0Fn?YZ>|B#{5__qR65>Ub# za5-W+>KNZWXyB&%4*>_b4yFzlz%wn|aXKl;B>uF@;6$C*Y@3=lAAOfL3{{%ayE5H0 z3Hqcxz%RBpLv6HAl~}y4{-Q|>bA(>w&v!bt9}!&3po_f1CSZE_@XAHt9%a;nR5M!Z zPnxLt9`7wJg0sT!eR{@acu-u~b)j~>OVX+}WY6-kgj6^<1vf)uCT7KXd91>pGHjl* zh??SoToRVK_lb!J8sP;Hzg}LdN9(g38l&Q9aMPh5ScO(GoOH{ddrgN+{r560F(Kf! z6Nfh;=opTj>!)jwq_>3G9qet@=}R?yI&31~weA(Cryd{qu$UF4VVqy5+}Z-V!mZl$oqRclOIrYRu7e=P>09!#~rv1}vT!#yf z1pGSA^ePj!r$7c6oW*QQu%YyO_qmHuua&XO5VQgapi%^o`0PtfwC2M=sM0Ntd0{EZ zHr}6k6p>`Ss(B`2A*~bLn5&>7{Ne~C5(PIkbzs-rEuRK&>C`;U@s$O&G?bUFp;>d@ z^RQb!IYI+mOt~LAc-Tw++J52QX#g^L4Ej2zNZGi9Gne?xgS!u&NoNh`)RuaGbuP`H zF{zI#g^dcb_li*fUKqpbz<07~rJ4SMzV3bu+u(5Z9{T&m~L8o-}>NM!*t? z&@Pd~%UK^dK}XBWwCkutO+eKHt*M`RclxipSf@cPRUqvd_hCyG$5Wsa|4#as5&ufW ip$qxHREA#Gqb1sW)_i#`Zo`=^0U&>(H+*hrD;q@ zN54k-kNF_@myUtSC^|Y$IxS6g(}(m6<1AwW{W~pxCu3XBAJt*d;w*nURD_S(9%X$e z#=;Zz#znr$ESKeUf#Ff*Y8f*tYmu5E7Hvim2H~T^rz@UGx1Kt?sW!>wYs;bX-@0rfAo3ZiR5p)n{p-?(VB%jOO|6}pzL=RWD20bT~j-G+@ zRyZBK%5jqB`6JY20ZgckzJ4O?uLy0c>rtW1{K6V>Ny-vh24Psk79~tmsWP9v6&jkJ z*?zj1w#11*p%|TS%MXliQV2sc3&5|l9=th5qcnX)C^NBTeAz}zfbvub0iNQ_6d7+& ze#~qX8hYw(DOsAU@C;y>`HLY~H){*)&`3{7LZRKT7o;85S4vby)WPPkp&@1pB|6kY z7S5jEW`a}SFm%-IO{|1ew|54w355nNv@`;TmjW%9Dw{EvpW&i2X zGk~tH*=r-(UIKVL=-GT396!{S-uPzbGeG+E-8bC(vIJU5)Jfkt4P*uQQgH-Ni|rpOmhI=i^4a>5NPk-dXK#068p!SBwfWz9Ci;pZvx^o- z=mmk61dCX7R-+`*Wk=53crV#K?l;;MvO~13yVIMecOr15O?2_unU`gotFwHjMK1-E zM|iD0>{2}{wA4piJkP{m?^hz0#I}w6j#2Z9xw>*|#;4rb*ZAIN7SW`zKl;jx4vl0y zrsUDyZq3g6Xx;0$N87&z*U3c8Y_&CfT5{66amUYQG~Q?W$|)TK6_RQARP~@uWspJ1 zr4zCyRw(Gk4Jb#|T_5R$urH4}R9*B^^&5;|D63IitmF5<0ghr+){{DHFgEpLTe96(e@{IBYg}M*ab1tU zjT;zrHT>Zfry;BY)W5Ty~5calizd;?$KgoiKlWBLwjvXY?5Vr9nIb zEwFd^@>u5CvBj8)`oOx)g+#A$Y_fh$7B=vA^yS;CWD;@qqwlDu2I+NU4PJ>qzBkD9 z)bu9MjwM{t3*^_?ef@3E1|rWz%ehqDJlLMGP-NR%v|CmBGKSCQVN=z2 z!QDShf%CbECFFAM+^r@i!J(da8sl2o?Zrp(ti9{;yfQWm=0?Yv*iX*gNRzvY4t9SS z)E+0kv~|r^P7X6F!C!7PE|Eq!BhSxb6tMfRMa_y7xGE9bP`AC(QC*lS_XKl^xSsfy zU1iO%ZaTr*<7*Vp($<{g!cci$tkMT}ehbTnRPTo2zV+MJr;b!^R5(V2+9;48E?A`H zJji;fv5e1;Rv2lO>nxroOp(y~8XVujhZ{(?a73wRoas!qcg_f|abzl}oj`Uht`=m!tZ>KF z53Jpbt+A|fdHtsFqU)UbW(*o#6{ch}&IjX+Tq&Bix=HjZYdT1tJ9VRfR*ZAr{K*Ph zrt#k|w&&;4Zo4F(W4xWV?UK5_IGU;pyv5bTga(W^a)&fHK1e7V*Oiv(N|CP|D78-A zjm=mY%(~7t>No1?*{^pQp+Qn=>+?BkOy6A3PCDRh4GeWFkC#9;%N}QK1&a6X?nO~ z5f=<<=v?4ftp~63Lp;Z$-Y4Jq2#%xb<<6*$uv*fX?s&q&HHQBh^Jv@N9bXhL?#&1H zHJZLW6SgKD4-@CNd5N~D#GD(~j+bH8&re4di9ek1?bjP9G|6wzmERN3EH)Wr(Ta<3 zP7gR&d6)a&S{md!*I!Y`+#WZgN?l=6^*Q|6?gI)1U)>U_35kdc4 zne1i`wJ{alylyQ2?oW@Z%I<&?U_Mok9IfD$FM$8+Krp+Y@h6!Yq#atoj(hO zjRr21xA;$%glx^EdXIUYmhLqxeR(7v2HV8C;qT`x%U!!a8N89Ke+-d&ZQeBp8nCzg zXs_6eHO2Rkd-J&eB;4CeQ&Sd;90-(~m$=>XEUf;e9wVu7ds-%MJ0obNZRxBgkH ztR6(y7GNuSS+P<0K>Iwu#gSo-kUt0fpB5AsiAlo|E;bs`$iY@rSn{d9{@@@)LkhQ; zyj!LuALG5!6MC$N0+&AIi{Bv@w`@4px>iK*n9#N&sUIZS;r70N0~*kjh{86ZJWQ5JPYkigE4nXHoobz-qY3)D4sxI zOw^7W3mG#NIvU+9{%MT}8a9#B<%gHM1S1kiK%}uM^ActmJPW3(hy=oIM21y!CE<^J z90t*_x3f$vbup3SH{N-YLuSt+8|@Z7f(<&C7SFQyX4t@fVwDEt-Qh%-ZF+H_@1-nZ z+hLf2=$22Mldq%*Ss#|3;vgXXe1a!4YZE(>9a;lY4SaQ!HTno-{P#d)MEG9}mLSp3 zgK5CwD<)RcvWk5KFiL)MW~Qb|H|l(Y%+&(=wA$wLGnV|a?XfzE=ly;~iekHwkyjCt zn%Ne^ErD_sS=J}5{2O=H`%||Zqel9UJHNG45|^lwI)Bk7j8p6yl;g8-{8K|ZkKu~k z6NCXnTR5{(M2X}icA(8Uz?Z{pLjjK}l@W4kSdlSPD0ZVK>mTjD+^bOT&9h{*68x35d^m#r8X$2BJy` z&)AL?7Ylgv7QgGWbNKk082w{%f_h4uku%_PlH8c{G3AxUELsd!%w55?jr{r9JU;jI zh8XUp93*pVxpz0)H^3kf)H-kyJiE%;vpU||uUlo~{RTk>X?Rm0JmDs+sF%kwSd`wX z5nY&-b=pVJQXqRt+I>7@XTcfi6C2(spB)%O_~e!n*Db_m!VY?ZDp^4rp~u6=R)>=6&LMtLNh;iH7~ zfOY>5SYnjP=={6$hY!0qptaCs{eb>JIalShg1MYrz=qY^)xfyHxhIu1hqFhOu=(g& z$+Z_K^heeG?A*?e`bKhn5X``njJ$gLQJgd}c)S znx()kIn$Cm1&&yb0)5NX6z-FiYVMZs*d;E4@?j=oNRE;fV!d` z#!vOg(ED~=qlb5JbFZD!TQP%1suES&eGsF!#}R$mLRr|>27WVWFXm8Hj7t<+id6Z< zC3ymIDSxqc*y%)YXJDV$69puwQS?L)ro@~R=#WSy7vKA68UF!#8@1Wrr?ag<@rcOWniN8skUjV}k0J90_Xj=cF?NkE0Ar1;2q2fqJ( z?+t>cZ+vz!_s-hQM#n)z%+mM`qTJfVI}N6OLFeiE__qJB03#?Ki{&fWaOqRU+ez4B zHwq>78RZYh7n$I?GqVtE!QJcw*p%qL$gnz9XG}J5!`Pz1m3JBu*!K0J^+J66@(@{Cuv&gsqd%`o z)3?p*XMdvsmGltfTs4j2tp;qy34CEg|5|^>E{?l|JI*1eSbN7xU0r{Y_(XGgQ=i{# zeh`zf6}|ombwE!vf*&%d>X04yU3uw!wvKr=R7nwEUbIvAa*QvaVeTRB*-M4zyGbu* zD)U`(#96nMe)cNxOCPsLHn7xO)C$0NAFmGfWyA!f`+Qf-s}P%WzhX-&TyaqWNlAI} z#2Q^X8b{J$#OE(Hx(np_vgTaP%&+V#PP9_D6lg@hLhuwoGxNXmlp!3^?Ahc$H3Nf} zb{hO}1xD*2JxfxOL`b9*EoXyF^VGvkYdwuu$_r(WQ@cZYRn%2VO9FRTX9%CT5BZX^ z)i~eOdkL>1`{1Lldjt=8j8=fr9o$EKC18g+i58 z7kbTVJmjxs&$6t+(M!mR+iKD{u5I#%IP{WyR%S16E>|?f6gc*9P=bCt@mbKCMK3o zptwjhjoD=@Dhj_PL>@6=8LI=-(x$Y`qNQBSNM_IMJ z7)c86tkzXkQZ!DRi}a7b-n^n@7khv0(DOc6fSI?Itr{aGLd>Jo(x$|ufkHTY`Yo5` zwd=Q*>gt5vO*RrXz7U{QZy--0^)r>C!rLEEUhlwoCL3u zLJoR=C#5NExLB?SUcdfyej*>_`!bBa@W{FLn=q+f>`2D?iQw-fIO=1~PI13kz*?G8 z`@-59Ut`s6)M=~pg79QFF;iG5!DTvI@=9rOU`a0)Iryq1f!K5|_`9RA%AAB1%wZ&A z_bqx1mrRVQ6U&qkh!&e`*Edh`z3aFAx1}y0Ta5-q8U8~^s@kCIl@yebNcG)j~sPj>8xYJj(zo3JKtciT7pGoqvZO>kW2Za2e1&J ze}stHLa>~I3jDY?c0O;Z_Di&0F?!Jv9W3@k{MJBCy8bnX+(LA5>%t=UKkg^oPbw4L z8&v&OUgU+YH16$m@8FfA2VBmocOTuZdXNMkg=P4zWCzal;+;s#Y&*A&jO-*LJWO{9 z^Db3T*eC2$BWuNCjO|jl#N&|!^nkm&H4hI@9v4HJMbVg+n8^pd{<239B){8-&`Sh@ z-i8+sr<`v=F`ddoGpMo0(SlH~U>64HqdrrP@Of4khoppy+nh?zT@xvWy8r`>@x;r; zUEG@_PLziKK*XbeY9Ic(H7OZ*D=HMtE`Ph^x2EVL)?fVm17&{jY$h%76Pubsk-%Y} z9k60q1+4zueUcY0IiI7$oDmA2x4W)#GVcyL6TLOtTgk`Ls%ohzbOnHg_sp!`LSC~{ zfyN33=DD^anFr6QP%5+(5VNwhn4@8Z06mlj=wXf6yf6i{6f!&rb|3E<&ZR(h0E+7q z1E8LLsfiN>)I+wfb_@r7RTuuAvrI>KXFR{ z(xxvLX)x`x*C2Jd5wC8}`G>llvjVKAMshumY;iC3JHRH#+x6&>IjA`vNdnuawBF@QC5^{wO7Hycv`&mCbpz!4S3 z)CNGMOtfsEIt6NkekukQDJc_4p+o^lQGoI(tv?k0!3o2_30crrD=15_nRFK5w6Uhv zQ#>@-RtX3M@u}<>l@I_b`CtGsylr5tK_#6j1-Py#t2Ch^qK%MwowU&O2BrKj)DzPK z2XvssH0lZEO+R2lFAKSPep^URvCv3UWE&7xP6dl8oUwwKV);>u?C2nW0R-Gq7qUI`k^)Q9GlT&hGnvG5GfH@-%8*G@Yh(+o$B%Fu4 z=_E)+YI(ID1d;~e@YWj=9-yfm;@Xtt%r#nC|x^%ri{teelRp`3$@}%qHXf5Xd zrg*YmR4>H=0L#@o02U}arGlJ#&r>WM3iV)UWrm=DCVdKifFgMqfNrJ!%M$|_+eQiN zk3RGA>v$%?lwH1fU7hr)Q1}Z)|(R-UeYu2)3Jg3{^b&q{nI`;3*9oy9VzKuiEl4a{*-YCyU z^EZ9qf=Z+pN94&c-YFn??@z>vj`Nk4l}^J?`D|POa8+FHR~)T8`et6%B2MoMNWaLlc`l*?*$GJWJT9h`bh5xI@$K|8=rw0k>0CpPQ|YO`yDfyss7kw zcYAXk0HDr!02Rkd2dW@4stJ8-^g{mgO`D8;< zE-pBXkvPlYS557|oxB9}hQj`>Sp9{Ge+32tN~Jf9RTQ0BIwI5{Lk z)*ZBJKjUhT8JGsW;(5|(%f_i!hBXIGv|Xy z($?>DnS5;tnKox{y-}w_-C<;&2`Nqpwb8TJb$5M zD04}y4QTQg_-St8H3*i;ISk8W`bLuurOEn`eI`=wZ@eo6D>^I&z(!yD{@AzVfNz5t zAxo~_XDQzNi-C}GQn3uKxtVa{cVhpA2b$0gix{PQ2s$Fv-0)Ed#`c){_?atOz^*+Q z!kA~udpo7iFszNeWwj~3-on1*Phcgml!Rd)MBOZ(-#BVb*aP{o``DcJJ+=V~`jw_|QXZeng17|(t^2V7?;jGm-N$i~46 zyNxGvRXd6LT31EESE{eO3p0Lf*lc*fNW8E0b0i}|v34@kI=&3-u*-gf zc^95_FgrZ^U`}|>L9>+?Wf~xc)Q6H!k<u+LbYc&`VX*|whmQ0`7dQzjb|99qz=WpU9s z4GuwmF0wtWdsy$V{^6LP8=oa#NgsjUiKlA{ir46~Wtn3s0iOv(GFs{krwMA|PQ$?Z zXwvy(xRx(+bq>X+fQD7B+~3uvY?dUwA2_;sO=uS)AGZ11Kb4&DZ}#oUfpefittTSf zf&0UaLzs8{3A`o|?Qxou3pEn9$?skrt+mv8Lm0^A8t!gYG#eq_8P7mEW~R+j@%cQb z%L}@uj~9`D#}h(NO=8;=ot26wqBGMg`6N%ja-t6lcwcP*<;d}3A)rhhq@vW%UE>i- zim<9IZodw-o#y=F&W#&g9BTG8*m)YvQTW&Su3EstyimLLCH(S-|F8gI5Zyvh1W$O= z?cgwSxSz78H$UDa!|0JjQ0iH5yfp{M8)uXP;se3aHCI`$l2J*NJu5{Uu zztW|KEOwDwpFk}ch6*2{HZTos)uhV?SH~B1gFmrt2@uE(jH~G!ldc5GvBZxIAd%z9 zlYsGQ9{rY2e+)-tcAH5J!_;q?Qxh=`+{A?cS}$#WNeV-KVh1Chx)jTclGr zhIW!2e|8yWwKdCBO|$WRsA>4l(YUIF&Gf#AX@;3Y}vK|O(ZePBnlgy$8^+bM~^hR7a zwjPYU+B9}Q=hxHFQ}^W68fVqldk@5zv6n~tX?VH~VfJ<%h(TYP&^WF=xz764qv_Dp z(!eBn*Sk7-rK+yhD@^^zhTZre&c?Fb*_q=RIC%zar#~pv-IeT z^vHI1W2MT(NoRNnelmDQL>GJvNu(6<_){-NoxU6&*oxj8L8^^QS6&UANqe0*3Zi^^ z{j*Iv1}pF0@sui$cyX;*^U_k%jJ30>ELV8w$P#W<22*{3XjZeSGQkg1Tu|*ysd0r9 zm81^c1gz`B2dv*Hr21FG1$S!~FOdbkhExI_cfL5T{9&u$yC@hIdMcDyZl8D7Q_l8- zRAp$g5W|G(@2l1g4zBSPa|03W9YV=hh7VQFHj4@5{v%XJDy-J@9)FfsYK1MnUwyxt)X6vD zJfwaSXz+f)(@Rr!&tqe1RYap@cRq@Y>~tzGM>+*?Xx`}(FjqU4s3Lglud(fm*PY2KQFYY0V zH|=t{ett|OBP=FZJ40Vbx!#;KAZ|wjvnaLyngiI~(i4t4HQ>d!Zi!s2} z2SvvEgpguvSF7yf^Y$rhgGF2GdE#9Mg%jbTzsM)JgcDy^Oau4Z-4$6)$y^x1xS8_} z8P@I*-n^j}VL29HmgrY|{v5UT31QSuR-&(u8(CnZR6BI^24E_~pp2TgQ6^$gMWEa( zM*i8a_B4Tzxhy>$_^Cfe6+ynT&zYIba?wg0<~U6d7mqsmg;B~9%5Dcn-$q_)kqwH} zyP#-^ELFNht64v}(L=~?Y%^3QId7GK8m8Rr<~Q1Klm)1FY(0Pa?^k4;e?V=u@l2%Mfs58yqaWhd~ zEJTC5m2+?Gmw0V}Z4puD2-=akZ2{>Z6Jt>O(olnYlcKL9p-jP43h-vc!RF0?as`@_%E4?>ONCV{n4Y6zSf7DiM!@pp zsN;h|Pk}6GZgR=J^!A6ogNOMY^4~ttb~;YmIL&t}kR882Sy3y9xXY^3Fi&a7Y zT_Kq4d*bTDGSzcV$!7e)gzM9wujaMLsJ%Va8GY9{~1-4bR2Y#el($C(&ZEBed~ zC0(@lXbNNW!<)f|L+KBc*tfhq>~TB;)0i&X;biL{sdwDBpnfYKwcgtW8x3QT8EwZT zeie<)YIU@$N#Yd6oD;R#2#;f3V&&E}1f7f14kbDB4*=bM>Eo$Z$@as_pL zCRc%{ZaZqBv;*H-*nKp*R(Y_F^3qL>jiEuot_O@pqqYqWk*TvH9zcNXB;|WQpzi&7 z(e*3sl9VwpcQ7mFR9wqG(fmub-hZXMW^OSu`Koib6q1NY4J003pLnIN@My%;8tW@= za_8V=$X2OqmRGZK&1|Fc*9qm#E2)8_(KRl8#9=*USxn8|#E;2u4H?F2DQ&*2&QV4V z;GI!jsh4ZP%!<|4`l4suVoitLa|d+REJKnxc2?w?PtTF#R>@-BMfPThjwhkOo{U@V ztn8!Z-QdM7;|7*v`CT&D2`hhF`6-)vPEX{5%ZZbUtyTJUU9}bFrB)Xioq9?vW&8i? zjEDPs)Q(ovx!1Whd)ADXBUk-0Pn%}d?xeoX78raBB zO=PW}t6A!PWS4sAgx%=G-)9JckjT=(4MX=~#Oiy;)NSD9*dcC!D7?GjOSNnDB4R_O z$I6%Rt7hO;U~EF^*i{)jVCKzeTNrlcgkOz*%i)?*@An-w@3#eOetw#?9$nt)kw~e% zM^%*_bAev5r}sbNZ_nqA< z^B(_fa(h1_XM#0UGT|=ObLZ#)--RZxTU*hlnZ;7UUXQf}Dp*a2`UQ~e=gwN%`w9T0~|3q6^lQtisCsevpERYesug z94^&OP5{y$+lKZ->OaZ|HcWJi;!-L8T^&TS$0g>hRDrxw0N?3|+uN1>dF6Utu=i3^ zr8SM~C~!oXymPMm0au8m1QG*8-=BT0wt-kLnvZU!dR&mbY3A!g4SY$j18BR=!JA=< zf2d)Ca;|QW8mb(Ky-E{UE&!|(uO$c5kp3UAPt0@aD6La8+cE}GQ|Dc$DlLfok@_K@ z3EJ6hH18bx$scgJEcB4pju2{tu&~c*If?E^N$&r5vqEXeazA%@L(zYc^a_nBr~n|O zbZ7hgx&3e)MQP8VMGI*;f*~)Ej^)tK(rDBDzW=a*I9j;v1F_h^HqGQN<*X<=AQyV` zqRG>*X;biE^nC7q3C{{OT?mDygV$VbvKap_GIN83Tc$I*ly&7pm><1C;gevKTHw4~=1 zGdRKNqDbBS6jNvu{CsLqScH}`0hxo!Md*iR=oBzXZt%=ltdfJKy{o|7Y1*O<$ytiK>M!S8(y03 z9l@CrS<=V)G zilP>N5f+;Ef50*ua4d7A`9A_Qu30GNo|Dyjj^y%*raD#=20t>AUdhk zt@3)m&J2&+%OMJjQ73c-G@=y4q{tPPvL5RJ`NMCIH0!Ra^IrP;6zSe-yRakaU3I^1 zqk1qTFblK_w4&t2kk|vrDB|8Y8>T8BxmIE6KapxQ7c_@T4siO+Y4Pt{adMc{+g7vN z2hY4pK7VtqJI-N1V8gU#ete<+Ip({R{W&;Lg)hD~c)Qgi&~0?wqkWifWJN?rHh1{} z7!dNxU%Zr&%%XAUXKL}|hwDMda`W9sRYD=dcegBxo3vR9^tdPqo5k=aHJA-d|ROc6L|5 zfpZ2N**DWSF?G7AZ6H)%ckhQkLI#kr=e<;suK0j6M8CdeDj-re*EQ%C=VUa%85AvJ z`N{&-6|vofOQ>Y)Dbf)gEn8Og>J3b^aX0YXd!#^IuN!x^`3$~<2uqB@7J6%eG=^zX=Xct%g*BimYbV9*ZL z>wj1i*N=h|#d+eqZ3FK&HZMH?i?JN_tgR71V_Vl&d572DKPmQ6d~!wn-ssBoK+$MI z@~`TVk_QbBhO^qdof0l`C4BNr%$Q}(QD|t6=X+zmp4gA&@N=xqLGjKQ+TEV8N-Yp4O1ewfOB|-cgxEk#fRcw z;WP1Nvpe1&gUM??10})AqhuKkh_vF@H=nRuYn7f}!94?`%Y5XyJkq+_kaWMl7rl%+ ztFM}K0l+?^-HEF1ALFL?(`!r#Kbum^{v?7ZF#VzdxMJz*|s+*mSuP}Beg$oN6h5rQPn+0-(U zV?RKcJKG#KIqbXprB;^XQz1RZ=CLB^V$_9_84fo}78GL)Gu}0vSv>zPE&~*(dPV9* zc15V7cSTJ_KMxvKRq>!!PXB;IgCCQbNjwBuoPPnw-v)cXA8=6jrVTB#<2dm`_zQR_ z-VlFhXDJ>;W{?aJ&fs7L-G-CzR5gRO-gIbAbb(n1Rn~^hUpgilrjJdVO%Ir9=-qqW ziZ!6`yCI|l4Sq^KL=qrq;1W4;m7zzk=s*qbfyh`KF_$gi8%r%{C#Y>11J(itX`EKHc>81NRQQm0ycw7}C4O=*B>5Z@3<; zd+m8F!Go)Z%Y4Vpg<O8a&^=JlL9hX{#$R=icp2`3Y%P? z>1sH-J-h#1Hb5g&4084t5JV(7PQG@*iL#@hn<5HBIq>>kv7K`{;kgI%!f#yIaMvR+ z=a_wBB#ACv3`1Uup#vi%gy=izq1vaPYw-##TSB^&OWf;@;3_rW$m&320^p8JK56pq zw{)F*FLo;oYtW$>*f?>qmH`ZF#|8mn+g0h3G!ELvl}=#+FC<@-2pgtCuO%MA#lr3b z_+=nDZ1cSehc8FIX4CD%QhCE7)*yq)3?;uMG%piUAyRIfpikXW#*e?l-N{$K)ev~) z`eE(ElHryj;0mFk4gGQ;Y%*K*79THC3`XhoEh{@Q1%TXR_1tP53UuraHH~3pL7f0y zqDYI@4g8S*DTS6lDz*d{pbFjR`QZpXI0hm1V|7>_$;S`ld zNkgld3%rd5a~rgS6UgUDcGV>#J*OLF!0bHk#r+Yx-j)< zPlu@wFwP}sH)dLk)v=wuj*>d9@ETIPw@Ktnj0lovfasTl*Fnz0_w-_;rthbi;zKjf z)&9MjOrE{jG6Iw&i{e+WuK+!2zDf^XW#w|+m{6NvZoMe|3o;j#>OgXhq1vYe;WutD zU|c+M5M=CwLVs(aOz+u!1^)17^%=(Vhc&9axdaj-LwVv7jq_1B)&gK}SGutU279duwrAYZOQ2_S# zW+2_piK=6#uYaFzX57I(qhyUYjQeg=T=Ip9@IX{ARypEK(k1JMN1hap{ypM@?p)z#cV9~f;$-#QBN%V*W0WL0>NOPn#^ z6>N`@;Blg^sGN^DfI~}<3lu2bLHr=l4S<;fY}JQ5-V`$oV!$yK$(UvoG#CZvklX)F zU3l>p)TdyY0gA{ZgyK=f2P~K#9Pw8NFAasBX2kIo8JJEMs2T_7k~=kd&*deb%N#Vh zc;@EIs-2C=N#66flPulW7lsG&4Fm(hMZWQhx$8`M?1uln{AI%|k=_tZU&mr)Wz+#%56 zQAG#LnY^Z9+tdQ9^{C-KN4lgmf<`6ykf6ZnsNC}$sVcW?4j%^hliYu|#MByP-x#J` z>ny4K-tJL7)oi)sKcjR35lVpK=~FG=8OeH3im)f5nbhL}Vhp5TxQq1l^evQ|L&%LK z&)K&=FUP@sB|k!8{s>u)2q-rkg}w-@cdnGWCWXiT38 z3s`+g9Bq%6Ouq1J{9;*K*GB5Omj)xwCu2}Epli1w__3?zs=q~iLp%oszQCCzI zRqX>06>y9bawd=O$%C81HZhanvaIWw8!yV5*_Au72%=MjV95K@#$EDK2vQ~WFAuFQ z5dlcVphgI|!TX-+2jx!bK%c?T+LJAS|1F}JPTlKxC>}!>NG-Jr0J4iA7){6SmUWia zP7p$#p9(JDoJk!WDz{$@J;45q_wW9|;4mm?9WjtgoNDwBC`IjAP?V*AR65f_D|T>H z*I-BgUlsaC81!G>X{XSh#(@@+&E0!`5&IZ$6@Vc6tybesP)ar-FCRJp-V($~hi&1zN3mh7$|cYy5dZg?uhxDtc?uDen}7 zjsXH>!erCL%>i(J;ZLfZVvWF2ZzG`WvFAiWD1R?t$sJ^eHFTk>BT z>FsQ7)Kaee?)u$oX9l?|T?m-W8nFpnbi8@;{u2S;9(6C|4-^yYE$Q)8&K|asy}!R( zMlVkW*;B4W-V_Y3`eZtE2*5cM4ezXG>{Subb>C}7+$2w2y!%Ajwqa~pUrWUfGTpWG zqv^5d=O-+FKcDiAfV*}cfJi0f3imp=u$y?e-4jL(Vj^MUJhUp=%p~1^wcCV%y+(E9HKoa?j=Vue-c`Gt)fIZY-t$wsQ z=F|N_2D!fAn(A4T49pYhRnRIu#fUn_()m`g|FCldI8h$^3gsTUYk%HXu?Po|E(mhB z01W%No)dE$W|?EWr@Gdokyrc{{IWZoL(r=uLAtWsz9r>UoTQMVg8HY_Pwyg5xh39y z5Lu@rsDi9=WwuctA7$4%hPuk2Fm&g@77*gl;C9gYx`j)`-t36^)APU;lu_>UQ*OhKg1-TYj3H;s;dN11to z_QBq&fcilV9w@dd(|leb&`v&ZIJq5QTFc*O498A~dBM2AWOF5KQm-2wOwN;g2i+*GN7MP7zt6aEUrA911l9 ze3@~m{@1|!zZ?Egaq#0@oRjT7u6?T8?sGN+6@%oS{%ff{LDAvrzyLk{{Yv2 zh)GBPgAjSa+QRfeGVM^A_rdbpX1P4&x0I;U4gQQt`WbF8U<_Qm5T`SE(_8n5kJRNq z9%eBF1PP7TGNRf`AEi_1J#Ip4$~Hno^uUO^v6mmMvk@u?fGt6oF*Se!#-Y^!B*a7i z?T-r_1p?73kzd)zo8?ibnbzD2SO0&z%vlhuEi0{)0Tuc{QN@6O;=W}9Otsta!ea`@ zq0k3_a9gSJgZ+Sf1DxmGA7u^7g#}8~0x@O_C$ita*9LuLnIlz`NyP2&366H%WzOvtF{z4hr$-oNjW1`#?yG(j{_8}f@B#lqr*&Ol6MgMY*#80)-oao1 diff --git a/test/image/baselines/quiver_colorscale.png b/test/image/baselines/quiver_colorscale.png index 7bbf727a409b0ecb414cb8f87799a2f1e955b6e8..3e0aa81bbbcb33e8a08d50dbaa7bcfac451522ac 100644 GIT binary patch literal 17292 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 Kpy0mYoBsi;=$g#{ diff --git a/test/image/baselines/quiver_custom-colorscale.png b/test/image/baselines/quiver_custom-colorscale.png index 72c2db79e04861a13a2466e35074296bd26477ea..c7de983abca348bda6affba14334753da4d22553 100644 GIT binary patch literal 21053 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 literal 21670 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 diff --git a/test/image/baselines/quiver_simple.png b/test/image/baselines/quiver_simple.png index 18424d2c9def4e6cbf5a7fddd9fd009ddb8d118c..fb0a7e451f9db87f045c4e133b48f50821218847 100644 GIT binary patch literal 13934 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 literal 13170 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 diff --git a/test/image/baselines/quiver_sizemode.png b/test/image/baselines/quiver_sizemode.png index e032ff7c306c16c5129b1ff856fd50a0107112dd..b914c5129b97027134f23a773feb0ec0072e9bed 100644 GIT binary patch literal 28492 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 X75!SQl}aelf{&-WH(9u0_p$#15aZD> literal 25138 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 z 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�E2DfB+hma`Jbm9Pi@lL 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

iZRV*Fxu7L?)S1oxrA~lHfGEiCOZr= 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 diff --git a/test/image/baselines/quiver_zero-vectors.png b/test/image/baselines/quiver_zero-vectors.png index 8940c9cfd983a0f8bcb4851783e23accfd81ebb6..f285826889b5ffa7af52c8e27ab0cde288417b1b 100644 GIT binary patch literal 14882 zcmeHuc{~*A+qWeul2WK7T7+y#BDw{pWe!{+W*%_kCU0yN=m z!oqXyx68L#SlCQiSXf`|;sn1uP(1dUg+-L*+GXuKzSd;i?ovzp*p)@$-%hcf6FvR* z%_&<2&W~GK`%Z+4Mr41nd7&lx2)F0j*~^pKby_d9ZNs&npOf4tWZuE~W{1&3h6&iTCP0*tf)S z@b1{B#lp(`c-Xvyb6?S!lDGTVc8P|tfRCHI_7xr4@uNYSEi0QzL)xD@e>Z2{vCH%u zv(?{Ci&yETmUCyCDA8ZQ> zVPTCtyloNdjxz$HHpY9dU;JT1NJzt;zZHW1{M^7?&a9(9Y|yH+<@}-IVFbr6Q~uD~ zd;c05_z<;`XaAu>tATAtUWB$}_z&~<6}|q^PV3h&!NUIstC?ocVU1X9s8|_v8GE?% z*i%7k-{U5h9u1}r$=7unuDtZ+|X+U&!rptTlgBahPXK9_>Zdr6*c7mF#)Qhhv`9qAl1b|UMhxWY{f zOxjqnoO!9lUbTg~in%IMoN6gvdh*OduLUe@R#oF59J5kZ$dB%@CG3g0$75=|dO6*H zq(01JBuub2bh8h$<$cuS^Zv!yLWGzG<&T&TtF)zVj0q_$K+_{p5fD@?xTmUOAN#`Sq1})5;J`q#J2yDB4Ap#QRMpr>8A` z64@$x8G^;CCi{*)TbwOvZ%n%AX}j?K+c1+5N(6>hg3|MEuz1IF;B&mhNAw`NjD z!KkByY2m?+>xNg4`Tg#Abri~=LhWLWO(eHAgb52Zy`rc5+XVyO^`Xf;x zbxnWqDA@)V%-C$W^xjGijfAtKh99(yqNx~{z+w2%{V)<(I4Z4fr$)!hIhoH8D{teC zadFLOnwv9*^8U-y^|Ub&hVPK4|2aR(SMkX23$(Eq!D@%W_royE=HRz#)kbr66Pdv7 zxg_}IiFbCL6Vn*RI!12eywrr<*2bEyX7ExX;j>F2x_o%#eQ>+llKzCc-%_iRjzUel z#`?kP*a^FtuB~GS<(v3~SO*Fh1n(`!!G}h@>GKmh3fUp$gU-1P zD9k3A2KLZC=oTg3ZYtR)8oDtms2fFKY^|ny(yB4*)wW7zQ(xF0n(&F*l-))t_g=DD znH@-f;k`-i^O4NpFo=9Ir`ov_0b`G2i-6mgvZv|3LpXL~X5J-6Xl1c@gAoZnoDX5& z`;=ThRN$*AjD&ZVzMf7$o36F;kvFKw)K`Pv86yyXwkcY8J$mWpzRrw{b%$kN;0EmK zAMb9Em(ZWlP*C4m(qt%jJ(~_7tXuE584TBvsZj}%F`-}O70!j9E3G5GE~}H2D5##R zy5E#Hc5!X|l}kc-ytTh%Ev-RLpee`d(+V#+XF3VH6W6`+J(O1<@_jT!R{f2He$b2_ z^bFghMjGcsgwXWwUvH5kBL}F`I|56U|+~x3cP4%s7}2j zfAXBMsF5QU;bJ0NIsVf0ZWw<=UobTnDnrkzD<63x)Ckt~NHFk85gMdQE;stsz|PEJ zU5&Bl3Zv=a$0C9^nu4G6Tv|780ZU~V0-r|vX zzx-K4q+k;)czwtg;uS6o&vrWP$H&%sLaWX>&cOYsBDcib=}-&qOAub%s|=3IBID*e z{Dq2^9~LG)Eh{35yQ#;?SeQt2aoy(PH9yb)beR#OLd-7L>1vCD!%HJGlh1_l$n*>j zsLWN2RjEVCanhzmX%#idrkJ4ROxj{hu;pxm<3lO-7kf$%7~}Ks8a6ZDTfNwa+E zk0RJY1nMb^p&}b;{qj|djY2NO@MxXtbHZ{w&bNBzQs-V7y^t26bnLz9SA%;a@l>+Z zYj&wY5NbL5VwzT6J&QG}%R#}2`SnI?9ez@~B$Oo{XA`DUgM;?hlqtNux|YSlkr$Jc#d}?UBy}sJHN1Z;MsY{a;p_gO|n{eRH>CYVEf7>I);X`(J!efUDE=9p_ zP!m>GZD#OlVGK%m0!1CGqYlxo9S-YCI%63~vLKwP4_xagD1al&PQDYlGk};m)OY=}k3$OA#%Hx%jJoHu|CqX)_@pocvpIy}uRd&FNBnj=5b$VIp9L?|VwX+<<_DmjTxvE~LG0=S11&Dj~SCWdO&K zhhMp@df8tj3=x)8AS*-+=L!5&K73fFT~||7VwcNm_AE{YHQWV1ChU+_5|UMyn@CU% zNUl%4gxq>QoqiGP=DNmcp$Bi0phNe}(2zP(tDy1Apz{v~Z=44E@52*!Wp(bJ2hWOz zwIy{7p=@!oi_^#e@{XC?PvCchKwv2gbjjVAH}7u=D^ugfoy=-68{9ne>9MR-Ifjr` zqR_iHDQGZN-tLNPY3CLBpbgrIFA^P24s)g522xw-EmY7bqa$3Sr`$buHD(6tg?cTe z?}W$rYO45!Ef8M?$GLc&@o=Zx2qEMVv|({BM>rqq=itfRR3AfKW1KUwvxxh@Ru?m}PT;^dMZ zJl;K*2>+wh?#^6!rGLh1$ELeVTPkB?s==}pvxq*AwI8L_)=_>x_ys=f(PSHLj5ZRs z5|}4;n$;2Kyy>3V$qMAxajc}k`2fNL)!K;w^cJ0@%L2LCokXr86*SC2)K@uHHYDp6 z_AP)EccZaJr-99f5a?5!`)Qz$iB=(w; z#9?EL_DvIlnvEaS2a!EJeFt99_L1feCf%+51=^pg2~ff zE2ef)iV?cCst3rW5?XLnXqKL5RZq{>Eo;iGqz$zUCd?iet-bnG(%q>~m*HA9^RB_| zk2%a45wP`Ym)~wYc>JgWM3eUAPrt2)KdOb}RH}n-H01_RdQ>?S$QR%n57YCoW_4W! zIq)@S+(&0dsFs65hTbCAM=pE1f~B==A#LpOgI)cg47p&=RlTDb+MQ-4igU;idOoCC z`YO#mBlQbEV!6Yh3kkycD5uNjI^~x2>8=y~#&unuW#1hkTH5*qiEhKy39<9SF_+@m z9&QCdV*J_TWKq*s?7}3;Nq;J}kj}lV&vd(E;(q7L84)m|l-z(gFGgIw+1fO5)dtH~ z&(knv8a>lo*>&0-fw_VC@A7Io7=vV{Yy-cpuUUSdtP zzq0@B+IZQ+u;K=Ru$X)13WTlnvF^Qp%<;Rx2DdIwi1kOW-YyG{p0qly2d$A1q4%Z+ zElBt*HwQC7zE!#FEB&fw+H|LfLG^l`gq(%cf-yDsv}Njz9^EuFD4+ZsuRWv)MxF7U z7Jm@P{(eI@bMSbF9GCGfN0HiP)nYG9bkNLb0DdWD)a5(f2^xQ(tQu=ocLrwC8~x0g zG-O5=F+Wc|Q0_*@Zki18bOc&drCV?(!`X;Drd54Eq_0>rA5&c6r{7bW0cQ8bbzkfVi&STorJ2;u`kJ|5Pno@(h-B~(eDjb`X@RtR^ zSs{siSEmybR4%ku1$A_gRM&NLWY$I+w2}KoZL*xa8LFL>!sgBsIgEVZ%MZ&mSIzb< zBCP`ZT~>8I>aHeDuUgEImchI!A$zOx;s0EL#=yH-a?Q-i0HUqPK@0Xhu)IUv;W)(c-DG2s?G3R$3+K+=}Imeiy@5 zbt+4!h-y?KYvqrN>Mf^urdK1U}2Tj-%;Lg)3h zFxSkh&8nXFZ56s{bF;>W$VSaPfwd;OP4-Sm?N>ZcdK_(*aHQixdlMug+ zu4x4eirQcYMjTT7P8(dD__G2aCM1NI;ni)dP#WaKDk_^Gn`-iC5*7@Yt8{Qh;o#mi zFOetyhW4~hgOd}5v##=TN(x*VD4tAkY1G~+d}k~-f#g(`SLr(NL3yE$J&{yL|Jqpt z3WTuv7sqwzUk@wxIejOQch=JUIVi^BHrNhNnS_#it!D(T=Sj1g*SoE#?6frEg(&GLVb4Wk^Us0)b}36TivTT0cZ!cblp& zZwxr3M#&*YxQpw#q@-8Bh4N}Bui$(LaS4am;!sx7H-X+7>>DWPx0Z9Dh>w~SGI9R` z_rY3gR+#ssAhb}cmbfGDvbwm9Ut%j;SRtg&B6+Q$PwGXX3aiwu_T8rVdnNxc?Rt+V z5Iyiq^pCarH6g!t$baJ_<4+IqW^ArDeS4!Ywz1S6L+yiNx_4L5iMcwAJOIHq1d9OV z`CE#5^~Ad{;5`oi>^nP39jONpwprD^yL{V&b&z3Dv8EuVIkGoA{{-$UBGo| z{Or1ncIE-#^V9{LSGO_%p6r_clmy)r+LTX%Z!!I@C9UTEmw;bfDgJ3|rKs4%l2ZUI ztDme=))L|kV9cgR9Ne~FUy8{;82|G6ywh!0P=&}S$?TAZwV0+YP`P|_6)@YrSNF0Z zE2&k9AU%ia(p;KsjRc7LX8_V1&AbwIMpmx8*=}yQvKV;s*Jtlu%02o(PZ-Hoag2TE zUf1_yZn2>aeM6FnMY6zakYNgucIPGZF!Wa1-DZL0G}BL!rf-|W9t*JX#< zTyc40=a$8eWy@k=V%8=qvvC(q5a|4RK|(Z}&XYZh8Ouw+^;++cCfkq!4j}I~ToHGK zS9ZVuP=lDj&wf66M_!g*d}ElP^`Qge2G6l37WuSyBPJI2vG8XLc_nQT7dLH; zq8b^yhxL6@-}BoxMoIi%Aju)I*;8OPOU(W;n_|R^U|n5*Uf12G&-@MQC>IhrxS)k0 zD3ztiLWn5To6RI6wQ>%ITpq9>OF*BmfUvN>=!rqoz;)h$ z{VzeTAm*(6?=uWztXjEay>*Msm%o*?B+pLce4_FT&^_EQikPCie-gc3SU6YWZ#$Xi zyEcXKZMwGi=!Ns}iurQWH8jbWmCuAJUFB!#OW29JrWjTAQco;4G@uX>C~mXnnpkiS zwBq}*$}k4AmAFIO83WgE`*$`iDdB2|Cq5o0M4xn7i1!;z2%D<->s9?GV z{M-BDIo7eUkx%cMa+iV*a~Veps6mou1>zCvy>FE90i)0U>X`bEj>K~#=;|oBdTdea zg=nlMWn|Riac<1e>2h>FNiWL^HqF48TN#QrfD@}U9^TE3abYI&-Jfme6{Eb49| zjHo^{4%$EC4Eb5h8hj6A2v5ggGPJ89F7p^egnJtUpV;t8T&s>UaKXwRBs^k25+1_V z*pOMp8QAZTFaCsaor+@I&|HQJYcA`TR*C>PDdPX~JDZ_Y zMCe@=v-Arvg@MC?ww2jHfPeb^OGWPr_~&|GBG_N}?6PSWaH<>sb*e4;;@v06RxmJM z{!)F93QvOEt?@_hcK-&nJ{AQFd=HL&q;(`Z4vh5B508zaB6dUYDbzAxZs8-DWq+X5 z?0+kzFqInX0*m+~WNv3Rhm?7ZM9SM_8Qa!smNl7On! z_DjZKN{z3TYbEEf^+M+>H3Za+O)DTQEQfJSE`Ym5p7Mseylwrp$9W7=V5~@*%vl2- z&C3Y%xbYeVz~QMmOudYwcg&JQjI-{&>La?;nQx4TF2<`CMr3hA&$M~fUDvUte!^(i zov=~-osw&wcH}{k4DECvbz&)f{oN`Sg53?tr|ygl!J2OpyE|9JY|sy=Zx(wWt+k*T z&0{OijT^~Wq#e;vu3(hCRMYQHpe)TqrV4?sr2z{(Vf0bG3gQ6jaH@8lb7R5l==XB0 zBsrx(DZKA&O8H5PyZyvs`hLP$VJDY3GHIuyON#ec^bu&GHxx|7bfr?@qWx5k1K}Qm zlQs8nwXMoKJZGLgtmasurRP0qzmYfPCxvSJN`3n{8SP$g^UccTMAGv88l%*m5okP` zIfnAu<=%LA<3yN(1{lM0D|ulf7@NsDZ~Mc{UY^aRmHK$w&s*YeqCa@ItgNt?dbd{; zUyUy8t5&K-X!PJ;;c0vY&a3wu9r%h8ilyG!La#H>CDq_=E{xa_yDnIw#Ak)#RkMc z!Gz5dj;~5BQdcknPz@1(LZ~?qiv|Wmwhbmq+ANL?DACL{wANSlRzjl+Q4DqF=1^j! zfTn>?!J zo5NKbECiJ2c+5Ko?S^1!7wq`A?M&tXcIJLM&2q!7s>c?4}Cj>puqutHj6xr<%i^{dO{Tot-C$!IrA z*>&oiA8n;AzZW9oKVeury>qHzNKW?qQo2d0O3Lb>2=wVrjgsJ+m3{=gfavZrf#fS9 zPFn+IeE_AL7u9`AAT`Egb6%_r{ZtW z5NB_;tY%rvJzaIh+}C?7wSUjybDu^3K%N3Jtx761(XEyw-;Ff03&rv8seu754#e|;H2SuLL8djgcAHGk1j z0OKWQEJjnq1R6;7(f^2rK!xcJ4g3)4t)bWQcD8^P^BNoyJ zF{n2in1nN4_2ruYfE^Pya_`g?Z0IkxvjaR0$C=&7ZTyCseq^A3K_UKwA&S9U8x^$C z$RT*f!3riO39tkyTflKLbK`4M9(xW7eRbQC)(bBGNq=uZ?h#NmX*%kuZ_$S|NIqip zPX8G&!@csFGGNQteSE}G{QK9Jhb}(&T|eQxWO=`BWL%;E$Y||{b3A;`0~@elMwDTxWbsR4S}^o{cNKm3bvh<4^Mmd7rsq({fic z{nuyHjrUe&MH{hN#yn)-S>EG;YW_G%A|I@!!4Do%^DPq0N`-*=3Zi$XHUc(+hQQA*BF5ldv75iCcIX3F)2Qf)iead2nWogeWuS1f{MTT zel@%ZKInuzq~vC)7qv5f7n(fE$Nlf{t`oTIcGet!p<_!K|5`i|XCXj1Q3Gg0W5b^9 zJew$Pxtg=54U!J!=9ilfgM0Y~C7u?&$AAWD0stXolW4E&*yTD3{P9l}J++ioFF%O* z9ytmKh|ieh$zCfT+~}%J)G>7x0Xb{S;V%Vx4@vnb>m*>@B9myg+B=OA0Z4p8sntmY-zo3`@8GzBRnD$?fX}e7omk~^E^2&fi)5hA8-RGzK zbd08yD<>&nuzD@3nEFbTf$z6;++2aqZL&a>r1ZpEz^hDv)r1C3}hzkQ?4r}hA-t|Ax5no$2~pHy(yNNa}F@&V?j(~tuHozfET4(**` zTRypJldXw@EpalD0J5(6D+qZ4oV#Ih?@{HVtmtavy#i1ea-jj0S@-$b0kp(s4FGk* zIWZfQ7I{C)_$c4qH5!vPJrC$-5`szHmWmWHYYI2xI zugX5^$;mA+S6hGk${>Qt6fFkiTdH*mv>V*7sL{036@E{stAwmy>oaGN`f23(J`;rJ;tQR4-1L=BE?e?=ayS>$kd=J znz7{iY>DA)anmu-SRP4Z(qvIu8za2I5<#d`4I!^!$rvKXvi*B7%i^+NYKW0W#WR3* zaii}gk#{=I!cDRs`~0xNCGGFonb8pk43v*w=(h{Hbs%g21ogr}rR(P8XjM=JVi=oYQ%pLn5z-)vnRi{l`;NUm zk<#5u7K2!N=&CU`mUc+p~D18s1xpb+Tq&okGPrnBD2Cr?0ToLwSvM3 zpS&9VJQ+UtewR6@Mzxj9%-Bp`DSq})X0ivzUh2t8Ze=*DFLPflGtP%yrDPj`cQeWM zkl6F6L3y>&rzbaHanr&FbG#%?Rvirh1pq!^AAi|lULDKi_vxmofVGX(E7~Dl=%WD8 za77~}{icjmTA4*zuel5VygS&kjW?8V2NfLJ&ZF(xK7iDL00UR=qnvj)?Ma|ur_`Et z5vw{kL7pSCRe%KvisJiA-bl3X;^=5fpOL{uu`4mhgt-M}PuUnZ4K2rlZ9&MW6-nE2 zpRZk?yB~a!TGnSRL{}9U;Fzwyzs|KI&slv4vi{XDh>w|2F6w*)SNsUr<%xPfK#vDL z$?H5_VqrQnMgS^thC!F!9CZ%t{0*by(Ux@4a&j&cR)R?i!OjZje5cLTEVbFLV>SfR z%d;^X6LL-W67QR6dtd((yfkW;9tO`E?yv5lv;^iV^~$i@HAP49o0z6oJkClS)?{+e zgDp5>oH_bG=Jb{f*Ges=Qd6+6CcPxlDa>8Z?kcWj54xH9EZL3c3$>3s@>f5ug=m9mcM0cAU z!3o|?9SQkn@#AdEg0o!^m5`JPWH71ar}1Tbv_!LIt4p8jkIEQR9HsKS5M- zh};&(1KvU@vb;fUlawA>0*uRYbJBJH-#?_Wg72K7O9DTLB6=YqvAKjKnQd|BwE%I1 z<##;WwzUs-{~G+Sm1n*m{I%`>PiOuigLm<%5Z|E@eIxMpljWMO!R3NWHjn-n`M?kP literal 15459 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 K-6@qd3;KT?7gGiR From fb34250e3d383e861f6a059551850ce6c25f5c2b Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 18 Nov 2025 20:21:21 -0800 Subject: [PATCH 14/18] Replace treemap_sunburst_marker_colors.png as well --- .../treemap_sunburst_marker_colors.png | Bin 276815 -> 276821 bytes 1 file changed, 0 insertions(+), 0 deletions(-) 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 zbS4|oSy{Og6}|QD+Yn>*FeEZ$OhmYYt!&zlO7a0WY%$R>U0z0Kmyk#|dqvi z8ESCMVRU1DakHG!*Ezww576bcNP^-Rfo0TWauPIqeM%bG>NLC+zI?wQ)rte&2h6Ij zRUvk(Y>G|wied&(?}wE_L&jFm`S$!4h?#B63=S$`#5W|I(DoFrrN)rTo8qtqJ#Mk! z$KihjX~2?e5HCq}C*a>7nou+^ksLTSR2vNnFK81CmmmS>SXx~etNW35AxiM}Zu1XH?=NWmGm!egvb2epXNzWD$D%I^`os!}SiolzjpR1SSr+wI$jVR!DFno3x~c zSRQ}PpyeLkk*C86`pkJrBbJABAEy`AKFY(d1@D0B#bx{7T7Z81Vmb~xdGoJv1P9o6 z2q*yc{-Qr-nB9exm^^phmt2>tuL>2%s+Xviw^M2NW#6~TczcaZEbqlhvg zx<1-qu~y*Ctz+-#Gh6?A{6H3rUR49+Y&1#f2_~`r5uet)t}r-kK?R!0S(+rxiib4y z*(GXldEup>JSe#|J0clB96-f)^(~xq2_>c zG={+dnz0mqE*eL`M&LAdRrWLN+%j+W{{VikM{`YWj@~zRi(E;g>QPWPq@+0b2fqTL zF{o*`y|ZnG68G2xx-8~ zuko70fT}Z5QF`9#7<%o^w7=b6f!Yw@yq<_tfamX;0`?`|9m%Vz4!|#zbH4zk#6PIl z2QR#HhODX<_|P|j(ZPrC&fUBwdN(C;tJ0k%bFE8;2KIx+4L=v@$H+y3rR5h_WA{>( z=-)omCa+1;rt2?3_x&zuM)i%q$6z7Kvzm8QwUd3*B-$i+*#rB5WdmUeF=r>Zj6T?KreRs&S1^`N+D?1pAK{PM~W0;KfXBL8?pLn zK7#+DJ?Q>+MgTHsg`?PTIHzVATuPg53LI;6& zQJLVnP&QP8ePcLqD`6D+E0Vr1YhopUGg5~pplKvA&`OFvJnN7dr}!dY{c%ssB3e5_*Ueh?4o_qNYAZruh@9Y*XMJsLXMqioTrJi+)fi^(R~c8> z2od5)Gl)<|`F)7qaTjTyM`4n|9vug%U4g|8yIq?MHjX!*d&p>88Q#yI1`VyFz5vUez zW;7Tg5`&ce?R)e}FI#<4nf^jE{`Y_m^HamK(wfPs%2PwJuq|93uT#9v#dd6eCg@Bi z+%tnrsS#>j0u~*_==i>$NTUdGa95Kb5cU+|mpE2Zj%>{r{nz_P2Fe^fmfw|ZDb4zC z)*MF2j|PVSfaT9(>@kWw`+dv!4y<#RElD{09P^bI35evd0uv$L#9{0w;^C#rQSSiTJRJKkb-}u+*)qvDzMSnIA5E0ik7Ro(98Q{z}3$ErO zZx!h)yLqlCkTKpjJ*C3fo$m!bcI&cnc)h-_K<>YrsCKq``Mb#8+|n}T zfBE3^c)YY^FJqGbj>-{`v5Z2UE1*{WNEMz{p0#qIA|YrCj+_ba645E!M8b8{QWk3Z zQyT@zEef4H;IK&*B5_NWygw8NMaeJ#NPt2~=#H-1w76rVdB-w(xV7K~2kT3-= za^tLW2}g69=fLsJ-hv>q%b~F5{AkunG%RL-RYS*zwLE13R>ilH`Gpt_UdPyjM@uw# zEMJF9Nli0*JlUwMde5f?JM9x}DQ%)ngaulPVCNIRYA+`>HYIiD@E2}3Ya4(yuvt#mHmi$l(@33=_pS;|RL zQ2p#7`ql7d);xIA;_e8`?b84yz*Bwvmjx0n?eb{Qbe(#G_h~jRv^J_?tD6`H%*p$E zXFCyQm_n8nJSYUDkRNpg&D!y!?Xnx}Dc{Sl3+#%YIYurnyz%kz zU!$Wx^O9m>Q2+e-)4k~cvC_Wl+MbE;^KEnM;h=?IS6ACK#&fXyG&v+@L>DT5&k53W zj*M;=M(p@%CH^xOeo31k*PT}Cv22Q^&f)LGkS4n~T`{L`$1xGgO?~yw_G_*e7Sp0z zyx^c1>3+Unp)y1^ep|u_uGjec`MDNJwgmM%_9BeP5-t1mi0PpSaY$_{gk1|#m*yh$ z9+fL2j93y*cR`cjM^zO*uXlr()P!4VHWo53iU z4Lv)=0b-vnqq*VF2f@_9q+8yDv)tfAeB=w(m?OWFf|y^S8TBq`p5Aq0v#ch)k`itI6q`A(S;j>_izP*iJwR4Ly8h`RoIXZ&}|syTn=5= z{cyq~@Y4tcss&yQ6{NTUy=eWmwR~ymeT3YvAZOw)7S^1v_=DHwJ|Pmcf2xlZ9AHGL zu;Vkcp;6`W?w8(Kq*@A>#o%!;a(2%c{^>@t3Ft8jc+8Qeg9-`wMjKMy{zwiGwY@Tw z_n&+aY9AnYPz4gW)ioSpP1eLHe;2{Nt=_o_8hnwH;`tHu=^Kl0*m744y+(%$Hy_@Y z87^~RY;izUW^^h?bcJP#v*?23R!~MW`E`vl1EekvW)}nDwD2p#r^c3ZBn$sI%=R>H zo((DD`Jk8P$9!EvDn^3n`DaG0ttC(HRR6-mfYlE9SN9fHD?wGK_cC)#ko=3T>xrn< z#fk|Ag}a8ciW&}9BdVY3sDXZQ;SYd*t38ALM>@={FgEKlt5@oN;5tcRG59mKR1(Et zwX?VPN1&R{LE@(8Xr;xu!s=U77AzdxhQu#daoZA=H2$ktP~3Ed~ihWT};`T%G!(0yA;D`x0vc<(r`ii34hi0Pqlog@Qev1zPj~%uZ^_7)^w7kpTm>> zLi@9^W@=>BjyFa+g10r5X8Pgw%K8MWm4kOHZ)bZx(%c>#UD*aDUlYtN*I>hzK?~+r z<9)k;q3w}G4cVM>8z8ew;HIc;D!XvOxg>WAY0J)Ml~+CdhyV2cWkx2haSXFS+}VN< zeuCZL`YvUSPh|8M`TtIP*Fppqh%||G$bS>u5Cm1 z_Vya=-uWz}bDA&DF%|RtY&A&UCj)QEWI5g(NTxMzkFHaCU?fM3A+Hyd#doe=;rk{! zJklBbhujls>a7L)-Hy8u97Sk(R(kqj`4ZDwP?gIeVs#xp+|eHovakdl;yV`OB6*yy%>7fWwAU2Gs- zj~njiF|afn5i%b)q-gDjeIr?>sADg!nv5d#2e#}WVTZd)0v#Q*N`YYNFHchj%f3g< zuc)yFPck>BGidBXH$O8PW!assqAy-p@Etd1P;u0f#Oi{%zQPd%7BCP$f2T>#-`jbO zkFG5$m;}RPub+gTY51({l-53eeS#9CxmXaCP%gte+fT{p4$`rmx_N{xfb-#Uc)u6( z7gce-(P$e7FNNwu2gug;YhI7pmX;hZ)|ab|T^m>pcxTo$`$v;m7niMPdEHk&1T~*P zmHDa6Oa@{ICoPk7r8rm%2jFJ#8cO%E{#oM)s5E31ZUCS9B5br~^^b_XtpG?Nx3TnS zST$cx>p4auxkzG9Pfw4FEm(R6hRxGc=EnKiWxvx^R1obGuU}48`j22_KUgeJG9G_O zh1{~R9>*mk4eCqlr)jBbGhcVO^-&-A(-TGvyo@kZcst0%@JH6kX}H<5sH0EsZD(hH zj|47wZD5H~83gU-f)h4rChOJh3zFovKpUnP-@HHK+`5fB?c~a zwY9>Wu0^Fa#Tf|1L~Z^{vADtPAFaP#;yy58EL^8h_EwUA<0WXoEB$^n>v8^<+AXV9 zRzq8P(rP`;+vVz3?TuJYqvY9>7OL+>;QiW+`?C?Kkm(6g*PIzekPR+a?+uf=1lu+r zo8b$6yfZWWqiK4opc{ybQO%J129D#9|C-(BBON@p7o9;pZc%_hTGpns%%i!&TshnL zTV&?Vy77e9#gLD|!`SEtNoiI3uMHfRx1$enk;xe0no0HpV zCo^e)i$2nT>}=Q_Z0NVSBm7Ia$p1;WB#gyKrHVo?sy3y&ySouFF`-RO?pefe>tRCn zd`KuL;zsvE2c$8mbk9CAtNpa+SHcDGOBMp(fs!%N z$BLOA_27XC+H+!DCQ*Q|3MQwDFS@}wtaq#j3cW9(diy?WehB6Re1U1wy~Bg@Bi|u#R?{>t!SmDJ|mV zhRI`t$LqP&yVU+_KS&H#bUfeTJohO5bj09@X_c8P7a-A7wu4W3Uaz(d_1PjnAQLH3 z9m?JK)4iGDNtwYvD4_X2nuVRU;AFZ79QC+l_Rm1xQ~CiF`AIk@#>>O=juoiXPN9JZ z(gMs_iE%J8K64^Hdubf*>|N>4pCNGi>gwvQr8R4AF1Mo}nk_=NLR^Zne-8iX{0v(l zJg+AF_hr4{Rz%J4gpXKUi~&jJlg%h1tKnvY481j~9`c;A75PE#iAhIxMTNxnRjyGA|sJ4jvRBfO5^m9Q2y zF^h^z4?gSWydW}z5TcY*AzEXOlbBa5SMw6ov%LvpYxDk}S8Fm#pIxdC3CQeyNFI$0 z!dkEyB$VYf*!#70m=?AuvN=b_J5`dB(l~5l1wvMfCgj4LG?Ktk-}+Y)1@yNM{6m3T zjj15U0n0@ke&vp;!5CtAbaeEZLnUssOAmgB7TwnGg~i1Ya9T4py>_duoSJ%KoL+C9 z>&!TBqhB7KNb#ZCxGH-2*w(_DwiifSxiMVjzO^cUrBe4w2rZHr)|?)|N26! zGkJa!{jhPLU*hVdfZwzm!8&UHa0~W(=CD?q+~#^HK|8KyCt9q&=hcf1t#_FxV?_Mg z&3;3O{HW0h2W#zV1L!=TwmX)eruar7U9^Rr^J+Fp zi(9VY7gvYJlVk<(dMvZSglYKYlEL}m5_CK%;Z=LF1M|*9CHx8T>~r18xKTNR>UIZe zMS*&RSsTtrz_ufS^P@;6hQgj+x#yFdi{CADkLVByS`$j9vIxIHA%cTdh=ifE2T9|} z6X`DQF#LoJwlp{v=qm+8^h-pm=hlF%565HgO~mY$ESsb3t7B}P`5FXb*d>h!m%KPzSdV|f#$Oz;9&avN4`IMz6 zB?ojB=ZxupH!mss$i|5;+o;!jTR`4D*sEkEv?|Fg2IZ71)ZzxMQ$kw*C-P9JuqW2| z>j5#JT4jLFy5f1?{X3K!Wjl)mSl(*j+Koc!=OipTvj?K)pYI{JGnhs%8W*t5K3AXC z4o~2ie0qPw#O7&ekdn1ciNG|IaU9|dvM=i=KPQL%9y5|@Ic8xSbJ~BLC>^Ejq z?dvt$M(@Zmmvon2)MEw|wA%{+#n((SP&@$oX(oN36vJs60HoClvaa6wpt*ET>;A&{ zjEv~aOp@l-)*!1bJ3BixY;0^3Q`4y-gc7q;)R+?;?v15(;~1nX)u9YPlQw;LGuS%IzMoX6k2j zRNOr3WlN4>bg+tz^N&6OdC+6lh44`H5b=rFcf)`$_#}^pnDq@D0}2Jq3OQEm zBwCAJG-@hsB&?zn?o}S+U6~6CXm_nxHocj<>Wt=Jlb!{5{8LSN0ClU%3LemM=3$yW zjO0b*@i>P7%ciQ(^6W5tt`9I#OI1`n1To3`~JD%Z;b;cx`9+fKb5DV z#}2&?>`1@WEQry)Wcv&h!^!Fx;uT-M(&&cn;wdHN)-W~e-b5cBmb#L_ady`3Kc2Fko<=RLHJR zDB5Ymw5VN;`4bxdZ@2y~T5bl$Umf3Ip0ROa?9Dp9R83s@3v}N<=oq#Yq7pD3-Grh@ z(0#jf#fr7d4tMM;fd6wuxjAJiD6V=r0G8(|4T+aig7%L$P;PprM_dXA3Cj07l#g;K* ztDs}gY}D-iCXtVd$V762B-eFQV~lv|HkW>@L^(r+&3k~SR`ZB4E-oT!lTd2PQU0wM zu7>!$|63t*sDsdybuR1`i+A1PGwQ*Dx5|IKCYq}8t0&o*OnP`Gw8oFxN1!fVfscU&K;9_d+$QXPe%mBF;QG{#2SWdAz4abfO~RSG9Z_p7yUP@PN8 zSX^a^(z`f~>3jQhp7L0oS)61B<0J*OJ9=I*eerLIlYLsAl=67TeO@O-sc1)Ki4>Ht zeXQoH1}^6=<@0Yp&P@`Nt`4lq?h|zpLf=_fTTV(L!9rnjEXaAZY4=Qx*T=pLSl>BZ zZpoiNh!*Uu&198gLqhkKsCd_je9NgIg?b@Qg79&*q{_dhdk~)fAHu#VI_|h@cVert zoiuE0G`2Mjr%BV;w(Z8YHH~d2jn!C7w0#n52XLY1qi+nLCLSIc<_c_zh@MXBOfmn(kZvyL(G@|W&1zl z8#wR-H2hG`?QjXD%9gS2izlw;<3TivFk7V_YTL^Gj&TtStMp2~d=G4D|L_VFCEHxJ zq+r)YWsQnj#wlTtT^4;1oBm}AKx-Fma>SIf{weeGN+hq z8KYut=IMe0xEWi*hN!4~8X*rz}AMYO>jY{-Y zttYB3@vHR;7@giMc_%wmWm|4n`jn)-74jOz$xLBlldt)UJS4^-a=vVd0tm(;_S7W`eYDZ7@9#1-M==&p$A7ojHCVr>yiRh=hY*8 zr*84FrkK^A7L&uCYlyu6EVoCoedxInk?*+x!4o*tqs)uH?a>rIQXlkj05)uJ7;_c# z(2-G1wLHk*nHNXX@#r{Z`?t#H9)|u-R2>?;%#W~i6OG6-Q*NKH4FeJQaNPWFK0m-*wDvSpeY#qwgHb0H!6|Nt*HLO^MHQ5*X7vGbZ}#1@f#LG zU0GqMTW#*(IC+xW&DQ>SPY9ymTKi?8d=VL^7m6*7NZ1wq!Z3J5wFcTkaE`6m&F)lB zuUTA`Fu^NEH(V`84#=fQxKZhI%);hBH(AYgdsc8sA#R9!-s0L{-pNE%6`90iZt000 zNG3zE_3DI!pPZi!d4%qoGu|MDr8)|aTg3pt)GUsnljwb!ps;>_l81^9CV+lOquZH4 zF^YC;L*UT}r^>;*<;TU0AmGEkh?*?blU~4j6~x?4lGEn zeeTP~>R;&{aOSi6<7U_f3-_`vKfeYEFy(7}YZf?66P5bfT{&bY|7Bct?$UM7T<$Y47RDOa;nj<5H2 zcY_>uhZc}k?z%i76Vmk}13kTVWlLOKT&|IwEB8jg(kiywOA9Ws=*XbvRp&Nw=j|+V z&jV*3hxDr+Lb06jenlrAHX&+%#6oj(LOv1PtXuKtBo*G5CYvsKXiL60=~1YU8f{b( z=}x+CP|M%8f?~}u#;uuRdh7E|*t;^Bp6)BUzKErWaa&<{5(M}oY;S2@Z-3c~_C15o zOH`s?`H^mBW>5J7Em`L4XQd7O$0p9Bf0I+PGX~0Z|?TD@>}+qJ*R4!0C@){YROjsCvc0ndjUFc9mn~on+zgM48zw*S zm3W#&E@n9kA_wR-_b#{Ya~2P}|8no^uxTN}hMrSlNg`8Fg9=U-NAwU6uaLyNlDy4D zRe}c!FtatL|ERd~-k%~&TP*zG>dk4OcFlEYcIAc;kK+qxmNYWnaB$dr)0~@sa8z=6 zS41L!-aE6q{PK%l{V~=nJ<_WetL2#unhFYLa)_1SkPp!?#ibUqvl7!EN=&Re`5|@8 zO(CO*)jwIICdz7*bWj`QQtvLt>*n|E%zvH(yDejEl?F*}u*5ybEGqwZ<7RC+51EP+ zNxVTm#&P#nh>(ptL1{sd92FY)L7c8FE%E*&<@Tk*7((4(P&Vbcp=i^k@7VzVre_E! z7h>z|1nq&MZvBGTl}98of{qpVXwYT{48DoSym>)`iE2r0%31xT?s|ya#>g|ngaQ)f z&d7lCS3RHBAL@{~b^j!!S)y6MSc#lGI-e_~3diyC4r+ZVychP50;56{l5Ys6I26UZZ~$EoyJ=AV zV4$`hi+R&ba7iN_mtwM}C(VI!v8`P1+Wls4%7@aiBe}X(msBJ^!DeJ(1DYwDiD)>P zfK5iP{^#k*p)`et){70&)vibK2}RVCY+~F@NtjA64CxBjq+5!R@&S^-76p!Vv)YNM*?$AxzbRv&dvBF^n&h*Kx#e>0+|W-R@}mtKX{lS1=*?qq%kWkW)y;C zhSITPXrShbS>MW5EuR(h87UO~E)|ZJ<<^LXOdI?2{e@5oQ;FkP1IS8Mn)gW0Yn&K{ zgmb2!l{h!+Bw(s-sBcPyxHuU?(^{B(wgvOP?|t|kF~Tx8P{5SUULgG!;cygTuAa|= z6oWR9@i?RyT*xUKD~D7S#?yIXF5>w3_|!BsutP&b@0po{)6)q_NJ)=!1aL->k&(rx za)gN$(~lEe_Ik+nE;Keiv}*4D_R-S@0lO#Vlh5TIP;N7BajUv&RwoR~0|xodEAZWpsPJPV_!a_g~wRTT)n4Xcx-q&wh#^F?W2p|1L$=CR9s@_AE8K0t7 z5kQv;rzEI!*l+-OS{p8C-MNNO!6-3sR}T+@G@r{SzfB~20e_!q4={aiBs$<^6)@n3 zJL73WHX5(Lnw#0wN7&u;a$5Zi`~rOrFFO2ZIAP1uaohGZ!c9M{Z)3!;QnMLT#aIHmbRa5s<8ShSE2P{ zbffen z{L3&Emy!?|gRv4Dq*iVeTQ~TKDEKAWQY@3@<3-b_v<(J4eI+P)#-G4fH<`Uur=G8o z(?139ojeDob6*Dzj*MmEiG37RqgZ-Edns>~LQXE+11iqz=9y$D&b)lz3YHDg>ULHU*Ii;)X^@M+Zsf;?5JF~s}Y-=aP z>5|tg_y=}!eMRR|0Ck)-ma|&K(jXKja>!OoY}k4R56Cgi7@u>^g%7BR$0}v0K3M>j z6q;JFr49Aq;hp9{aQL|-BEhzet4e(@e6oCCX4)8b?=s$~CoHy-$64@Lthum;s-FvT zkOlv$ELs2wU8XhJSVZEhag!g9$l2zh<{**s2HKiqHf(8ax2n7UX}2BK-S|SsUj0owGk>66Ranb)qJf43MPis2@QYva`^Fk)EK7SGEw!a00vhjaq zedNFeGB<{vLKnHbPpugjfO94j^+h!^Gb12c^y7-q9o8|b7GGqgjJ`{%XRI#&I61eO zH(tF8GEBfCeKE^7evd7{DuC8@X1R)+>--A4ukWNN%!ym9RUD}Zr3I(;zD*;%0AX-? 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 Z0kw*gF{ZSuD~byIgK6n&R%qBp{U5E Date: Tue, 18 Nov 2025 20:52:51 -0800 Subject: [PATCH 15/18] Use isArrayOrTypedArray --- src/traces/quiver/defaults.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/traces/quiver/defaults.js b/src/traces/quiver/defaults.js index a7f9f19193f..e7e5c0e86fd 100644 --- a/src/traces/quiver/defaults.js +++ b/src/traces/quiver/defaults.js @@ -22,19 +22,20 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout coerce('c'); // 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; } @@ -89,5 +90,3 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout // Set the data length traceOut._length = len; }; - - From d116c649080aa2b0facce7a41903bfec02066e4d Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 18 Nov 2025 21:04:39 -0800 Subject: [PATCH 16/18] Update quiver_custom-colorscale.png --- .../baselines/quiver_custom-colorscale.png | Bin 21053 -> 21118 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/quiver_custom-colorscale.png b/test/image/baselines/quiver_custom-colorscale.png index c7de983abca348bda6affba14334753da4d22553..eb54d4db4bad3365ab929ea6aba5acc09a87ed7e 100644 GIT binary patch literal 21118 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 From f3ae9e2dcfe16befecd4bf82e3266447f12bd3f5 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 18 Nov 2025 21:19:02 -0800 Subject: [PATCH 17/18] Use Lib.isArrayOrTypedArray in quiver/calc.js as well --- src/traces/quiver/attributes.js | 2 -- src/traces/quiver/calc.js | 4 +--- src/traces/quiver/event_data.js | 2 -- src/traces/quiver/format_labels.js | 1 - 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 -- 9 files changed, 2 insertions(+), 19 deletions(-) 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/event_data.js b/src/traces/quiver/event_data.js index cb130d1b48e..bd8507a676c 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) { return out; }; - - diff --git a/src/traces/quiver/format_labels.js b/src/traces/quiver/format_labels.js index c03d91421ba..8b56f67c2bf 100644 --- a/src/traces/quiver/format_labels.js +++ b/src/traces/quiver/format_labels.js @@ -23,4 +23,3 @@ module.exports = function formatLabels(cdi, trace, fullLayout) { return labels; }; - diff --git a/src/traces/quiver/hover.js b/src/traces/quiver/hover.js index 39aa07d337b..41c7735f145 100644 --- a/src/traces/quiver/hover.js +++ b/src/traces/quiver/hover.js @@ -62,5 +62,3 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) { return [pointData]; }; - - diff --git a/src/traces/quiver/index.js b/src/traces/quiver/index.js index b52980e796d..4237fcf810a 100644 --- a/src/traces/quiver/index.js +++ b/src/traces/quiver/index.js @@ -30,5 +30,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 60ca5c5a3e73aea9d12497837f20d97feed08680 Mon Sep 17 00:00:00 2001 From: John Degner Date: Tue, 18 Nov 2025 22:29:47 -0800 Subject: [PATCH 18/18] Update quiver_custom-colorscale.png --- .../baselines/quiver_custom-colorscale.png | Bin 21118 -> 21053 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/quiver_custom-colorscale.png b/test/image/baselines/quiver_custom-colorscale.png index eb54d4db4bad3365ab929ea6aba5acc09a87ed7e..c7de983abca348bda6affba14334753da4d22553 100644 GIT binary patch literal 21053 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 literal 21118 zcmeHvXH-*L*DfLmf~Y7(!GOw9M4C!d5KvK25Ks{aJxVVDmCzwEDxe}DB1Ni-5IT_( zq$XAnL4-g;Xi=0BLg)c0N$!eA-}9dLeD{v~%cEx&RKNv@a*I{bMpAbU`NJ)@C(a;OwNp| zyt>4z42 z>P^bNFRt~jMqP%c^_wM+e_PFNFAvb(@llUTJwoLdSO_f}{o-ke9IakNmQV**B1pDj z#5^1hN9x&pjAsqsj}M`(9tJRRxA!LncV6e=1s})u9)msK{Obbr4SvDm8^<4Q{CWB2 zomlAFe_i^Lm(S|u(4QHc=;r}e_gkEAM`q5|F(y;UpB1ajnVjZouHV~F_`#<7Q`_*{l!6%B;a zOBTL=jqkJbYj9=sR#liIXA?DjdJae*ynG8@Kl4txmRj9^Ek<{t$63?0<)H*C+?#!F zJR*fcanFWxma;jX>Atm|F_Y!3qpgpe{YO7)Fk*1w~Y3EIM(RPLySOS3x5D`CEwv4x7rU0JhL0_3kB_X}`x&+@z&-0)3v$k+LUR z6w4}grs^v?mN+abM>ou;X@~#4h^a7Yg=+X0;rENqZ|{mPRFy?2+xdn1YF1^U*h>pv zqGfxZok{G!nzndDSmnx8Q#*?7zd~t8x)Cwv)hZ6PFTQTSPN)^zi6!M~Rww;2y*k(4 zXXBpfI#3%>ksxPe%VD$N!!1b*6BX^fjB09D!*=`dnYYTJiDc;!wf3XV@)=i7bVk@@ zuhR&m;#UTydf&@uXEYoiwNuAth0mTLre7*^Z1CZ*7ORo0Wr~1oI1I&}%Pz^wd-w6^ zT?e> zSUZNiZDf}CxgI=(82hvvCZPexnb6oz8DhfyA%zP%0w+pPy&gjTCSKY zVwdl#KrGMQXVlMqEMna=8{L8UbbKM!FI;YAD)i>kz!Wlt6;*togTZP-tr`UiDNzx8 z24801sv-}@9D#?5k`-#nj$v)Jfef!OMwPY14MtyeJKNDn0MR?s>s?mmNz9|X-lU(= z&_m~x;XNmBZqn;n=<~x*jLw;URp&%XI;Lhueb9oOp@h%1F*5u=+AtcaLDUEeL)odZ z-nTgJ9QG6kw@5|l&sh*?jYk*z{l#UYkqZMs)HdY8BAycwD0W7| zX{p6}0{ePnQJ?!#dVQQ1do~5%`fmI-My4#zcWj}oZnAbl@Sz!eT&(Agd=_-(VJG*^ zagA3Pu1vXc(fdsGQZ=5Xtd@8uj?Z(YyA0{NI2cx@48;-<`c?6W{geLLEB2W-uL+$U zCm3r>i1^iERZ1h#|BDWF$t-Z*%8s4tS3hGI_ASAvoamxmQqZK36P0czswoalIza<# z)J%F9Cqv&yzQ4=hkPc*^7^OdM=NU_9bA}}G*lH?Lr%pd~qaJIXNNLPR+?_^o7Eu*) z(IVL^y(ys|z1tMuX;EAfTMh6$9z<2w&@6gL?x?afFFgkA-o}ablSX?F1dMkng(Bdm zav8ZPjxCPgn7l=TUY;=8!xW@5sX(;h>bLY8-{y(tS`O(?E&RYLnlC&plbiy}s9UEy zU=BG&OwZ9g)fO_E>0UQcZX&VSX}L3{Tx)L4+I7V<2M}T0`Dq$8D&XeV6)eqpU!8YD zd`1hn8I3nCcbAn)KtnCg9~kROn@oRtCZXqvL3AylGks=_zz&!WqcTz1p;mn*#KAmw zXFkHkxKuZEK0hWWFWJ=#Mw@9|9xtNk(J2+~3werP{g89%l=Q&drYB8h`C~oLoh3eL zyFMc}=`X!E_W>_jh1$o%&Q)3=HQx0bT#sBGdNZM(9e1N;x+0t9BcXk_8yv}UF=g*G z`ERhz{5^_Klsq?GG{>Ydw;}e=WV316ptx<|yr$R$11V(WA_T02a2x+47shfyzNKUna_?c`C?+mp+{0 z^l`FJpEIZLKJ!!q)0C4>_BW^|LQ@9<``|WWihnTcJ6S~4lgq;=FI`l?&d0=^FebC# zt5cEFH)VS`tL+?@j-mtB9*S8~O4a@ufVuU7`LR5ug0ph1NGD(0D(GueA9g6B|-T zF?(in47JOX@H5u69POu9DXuB5et(3{kpoP%l`(SK%WY0Zne!vLa(bg#VZI9-x@jG| zL#vI2(Pt@y-E22FfNxlB+$TeKx}O?YIeZkO}g{v7Tii-^txw9jQiU9vC|Bm zTX3otTm3ONIB(6_4+`FkYZ=D(bSWw^BUzp~Wq5m;_0D)879~ z&UVR})N6TV9IsJT^#^v|zKhkp8d6D67w*FDFh?5_ilj( z4Fp(A>$9>w43qp(3wM@J#w`DDqp`^OgLj;?u;{?6D-=E*ge|vJ}`^?u0xyQX1c-3dLEWsEQ@=nxM*vsHFmZR&iE}?V>ibuP31<9LbQ=T|`t;Vod$A=N1LU_JCM* z&-kaoTf}C%i%b>y)^(uGLMg76a) zvckR1V8i-3M1;^~2)s*FBNOK{&Zdnb_M4IoX+w5gqFn)H*w4BrW6?i^AKR=@A$02?b9O8Nt{F4Tm z$B?#0euBWcM&uk45@>i&OA~2G9j}#axTICz?BM4Sn)r#S6YKCT%e?d)QTh?m(dqc( zBLR$9-0CYkh>iEe&=rTWXH!(qNo%>)?@jt2zK}%4aLjeyY!6#%58Fp!K9x5MBjHQR}Lx!DY1@> zGAkH=8q811iPuZZ)bra0RgfH_H&%TUd-CecaYxR)7yEEPr8W7M#)gX3+IOq_d?F+> z3%lDbg_Lv`#U3-sv821aHb!}A+Bb5U&qg0+>6pfT&6Pk0C>(>8n81BMh&SW&j+1xL zVofCBWGdp1W0HsHS{{(&pYr6+aF)wBX{Qp{VU5F>#qn%I&ut1)Mbz4Wfrn-VG*eT* z)mpdH>67s%j4;M&%j}$yb;&Bd-O`mq##B}!D%?@>CVdDtkUVHVFCBtx$@vn|-lQ3> zR)lc6z-!`nzqZr_Q-MY!sYpP7sGcmtFFoo+10vO#Iy2(vln=maLF_-hrlYV#e~bhk6GsIc@o1)xMfbn$Xps#^p7GbG3F;ZPuxH z>x5@3c}D{5mZ#B!#{%$Gv>{)Ire{05JKhBihREw|!O)Ws2mNKB+78c}p6=^NP(Bqk zxH;gYVOEk%G`nuMS!3-vN7+Sk?>U5slzRT8iCWA?CH@REI_+W!>49cM=Xt+Dp3R97foMW;Vwkox66IunZ7*$)+&$3O4E( z5^@*pEEK)X%CAy8G?$1JQFZB-P9F>&ZO_g=b-lEvgS>wq52D1v0wWmkHFWK{17q&v zO=ifZc?W~gFXZ&N$(X@l=HC1qk7Y(<4LUc3xwpu>9w8dWBF1Z^5T7gOzC?oV zXfcYnqYgaV*-0z%fYBD_qw=);8x;0$L9`{v%uRoJT_GphJ3msGBcfeWq;)>?P$#BI zjDLCQC>9}FWu`Mi-m1_e=II2YX}XM^bG!knAjelo9g_Kpb?(jBC?fO_UNe7;(5Xk# z`^4G555dYTH6c1%cyu|1*#_M;W*B9%i3zyX+ZZzk#f#!YcY`CY9H(33ckFw*-{D(n zO=TG~Y0EV-^O|kqHL_GODq*Gf=&60Eh%~EqVcoL%?}%mlF9kUnLWA!nsyJ2109*4F zd%7WJJCiEj3|x|P0OVeig4J-h|voSADegxW0t%_gZ= zZ{6}qx}mh=Q+lk~=+(?qw-aRzVGUxRT-PjXC#)t`C>f+KZP*VUr%+LYtwMb>1PcpN!2XTfjGYzxS{E`TblK_})EfE3@qJ0|1WT_%m_9-FD_O;RFe z2QqqHQDi&{m98D&)vY4*uMPZ$&sZ9YTIr)seAJn$7nWquSJu``WP0K~)40{OZwIgVq;%wf!6U&|qB0B_8VpJPbGxz$uh?Um*=orDYBznFbYzXViKcD0C>GAP{AxNp8 zjBcUTb;6+vfXw^M06d%!B#i({>fJ}j#_*6pRua24Tc5huEW^XvDIy?;>}|;~{_?Mv zs{9yjt#`-MQ-RAgOkZ^)Q(5|G@Rcq7-`*#}feBS#UPsHvs?P0nAm>>WtGTuAQ@gp+ zLq%~S=)F}%Rq#F%#E!H^Hhdc0O(NN1%raYyKkNBMz}(+I*h4C@(+cu=BrqMWI5+4N z6yMN=&Xs%$$T#9fz3-ph90;Xy(AQBS66V8`ml3yUUh%f(@{bi;c4Yy9EO_jd(g1Xb&& zUrk&NhFpbt+g>La+wH3VykZ7!_T!#bX`(qpykH~LO*QtZ;8$lg%-)aT;T3I~l*kEf z@%*W#v;&uJ=+3pOks2ey=zY~?5Y*}njrm;5hGP0aY z29MDoOY{I*#H*p9q3PNANBTkMDCMPT-IYm$I%xJs)05SPdOr9I83i3;1I)2s%QBm z(B1vrWBkb@bqfNl3BRev2c`{u*6kGo3o2x3S#VGloJ5BpkcZ-6mL#;SVICI9 z=za&O>(g9o)H@m#*H-#^KhY3y;S32~Dq`NN2OEFW_);#%i42RCN(#)mw?7jEb+rzS zzOq+XgynatVJ=2kL@xSQ_~W(5mwtuak7Y%)X#%yM?9i+DbT-p!y0w z{#LLlKdIlz6kD^H<>wIQ3vbF=S&WG{@c^5VG4G~Jm5Nb(wO^$6TaIAy1J&zQtm!$z zGU*x1XZEW=&vi!w_^c#{-ACZ{8<5PHVjpu=*U~s|4)nDJ^pu!+F+}G32nF5*aJua;2R+w|74SFA%Ry z5pM`gS#Jzu|9S9M<;o4b)naGV!4PNk+ek*yln$>VTv=<0`-jcjhryUCqHA~a3Kg%{ z*M2>?)KX&q*$j3n`2nDfRD7Hg6M@^jEWS48h4EUKiw}6vNpIdfP8QmSediRG(ZGqM zUPJ4kyE|PUvg}!ep;rs<6xJ74?jd==z~ThoGX`ni2L;=DwyfbNJ*tLym{g-42=}iq zPF8wSn_VCaweJB#Nf4#br|eH1UZMzr?6Qe-3AlSBhoIjVo!;=0f0ED2qhuIeHO*`q zZ+xC9+-EI6ENIoc#ZDP}yGUK#P{R&5_MKsX(DwnEr964pco|)v*3^SIqM6Q~)jtfx zpwx)VIz{8TWn$gIsFu(rl;6%@P{bi~i6jPDFASNVA@!M1Wtma}Tg7GZ?n@sQe` zV-I}hoAfK!yg7K%DMLw zw=;{8P{R7k8E&>dXo&0;-HA=BIVqt8g@FjPTH3Gv;K~`u1NS1O>8bea%Zu!QLP#y6 zW+4{d9$9#UF!VO2#3V&!hdBIlWWP?>!-nZMZ6s6^3y#l0eYEvD3F|Jj#Q9LleUzVT z?81&_ktRWkNX}YzAV`+u;m=z72s_O3GwK|DWkjJ_|tCYPW3wDwLj=-O%zXv?dnV81^Lsw z=AqaQ8_3*Ang;u$0`P>rh={W+Myhk%bAwH~>Wu=0;UHjx3v7ipZvAI07qyoU#J9u8VN3rJ zj{c6Len-8(gZbYW<^Ln}dOVM2_Bh8=0P1Iye^9A_<0yIOJ8UZ49cV&CNQv*nZs9F@lA&^!8bEe{f1m!6C%@m$bq(a@12Q0hE_t1R%?!OI z)%d#)Jy|cudYV&W5WTTDSBN)M*R~c>055;PciT+3aM>E{rTUOOEg2cc>7{Lg6Gtp(kjNS9G>No!7`sC2LRNk`M@%=hOx8;i6+p{S0BGDVR zUkJK8{YqH1HLe-K=+($`x{o-sFn|}GtD*X@U z08gzW&ALvxYV|y^h_94(yI25%+Y5}z01nLC%gd+p*%?jecN@a|-d@o8+^7iuM#`?3 znw%aEK)I8?+WmoD%}kVnrt}R5HfH)+_}q;xKhJ(+seS_-?T->h`<@1QO;DQrD)n_W zn%K+BNBd@pVZASNWdF{I;E=G``YGc&=a-3;%zWMD+COi8ul{pc)25&QRP11^v{YrO3h-iL>B0r!?lx9nv*>Pak|w}IZ)5}T&YvAB(I>d z6#)}i?js||X`=6?*RsR>$(OxSMJhrxRl~3#z5n?q2a>Eu9btRj&|R7qPtKOQXde;L zdXu!W^=7AU>iJxd%rma4BeQOn$U<4Zx^0d&<)5;49DKPBUfW%ZSEJ7;WUCKdrJ;D_z6ogn(sRtWphoq(bo1-|^S)L>#Zgz8k99qC zi!&r4TcMsND$J$4$Dtk{7t84-l>v;Jst9JfmJ8Y8`L53(!3rX8cIsF=!urYQ3ix zVIN=XJ;LSfKR6QPN>WyajL!+}VSZG}WWES&HVT0Mk{Tj_Ly`Smb0yD-=rEZpH35B< zPQBmmo%lQju-njuU>1`MU;RGA^)eJ7kWKw=vB3fs;n#99T`fPEc$3d+Z2ftCzzF>0 zAE2sCZw4ZTnBde>s(?;!*I zprc&2Qu$cLLv>EWS|kY=wTE;7dl-^B@-BY_tjBuCySISgxCdwt;Xqw1huzXTEUz4TVH(cE>N3zNQls}uV6WE7{&hoMrhwmv-x)?TQ&MCdzY@_I8_%k_JX8f7 zx?zCa50UR+1K?0LRD@+^c{_!LYhwf;YNan{CA+0%>o0``_4KiOM&jRC@~iNEa59pb zSynWsY+cO!fLTj?v90?A;10H5iRDi=v%^|SyjY!a>akHBaCXK?yQPFr($86LhBk)R zaFySrJX7g=`vqH{9|?puz4pQMW=;$aFD5S(ZA-J=37|Lb@>?PLrzdOa`RmbC_UQA4 z&U#9oxxi%Q$~NhG^5J?ZQ6OrRQ(40uFgTW zkc#ZFAvvpjx@iKTa055!sw*0B&@65{FjUA(EVL||0GixCuoeUnmZovs=-5cGCXktDL?@BtOa^6lJYzu7;?P>`Dkbh4_><$zvK zOt(T7qVtTVTkEzy-#Ug>BILh@^$%k^grxwo<|l#L1rL4pO#Dx9ZPQcjNnD2!;#IUN z#`gBwa$TLFINyBC5O8Fq?|VeC-TVNum)u@0Pp#~@=e6%#FQFEQ%O|)+31*@reFc~- zuV`6hu*1<|PQ=peFokKotcGH*P5_Z0lFJN8DBHd%1V|om1A#!VP5}!0IE$^kLQGIU zwFPRrO+lve{hgAlYxwgsf}MRrBd5bn!qx$9Tloh=0CWx9S{k5#h^K(!B})PSSL@|_ zKp6pig;DKyt%h4C6bR(q(t6>CKeUK)UEr24Vo#>tD4d|)wz$=pU$`V0w z$!}SpEciS5eav&M2|^XWTJ8V}uog&meiSP^cv8eBD{5nesU&gyL|~@S1i38RH1)vC ztdNoI-r)Cz#U@!)eVEk2M(;vr?rrt|dE0`uiXWRcWC1n9`iRxVzZix$bIN~7D@=i4 z-t)uFe-KT-WevYYD8IEe|5R)ImJIzrQbOhI2IW?#=6q<;Q|?+MeBVcsYmSVkR%`wR zE~Kop^FvBHAQE&zWg98SXp_$HLkl0m^)>7D-{1esS-zv9kL90^Z2Uj8o!Ah(C#mErE;NGMgXzwvcZL3!r$`{pFQ`0J2T=M#zuE_AH@xzH>WZn<@1n zZaPz|Gn{gk!Q))j@2-b{hW~D%w9{&4o6Yn|39BW|%BjGG&wB0;?=%Ag1~O;EKR6p3 z6=j949ABARne%zyvPgP?9?Znyycd@bfj}o!2!!G3eJOPIDG=xuy0+np#t_lm6Ja@U!~QDGtR*nC0EVlDhfw1iPur zQzcNhl&R2EX3q=%f*!671Jg^%QWjjPhWJRwr8!9#qtd|;_oBO>uU7H!Y*FU+ z1(;~=zPTxl`T1I;#n|?aiBu! zUqXev$zu2UF=&ySERP;aYU;Y~80L1q8{fCHuYOJ+sb)X>CG3`^RFJ2UDD-0~3NRmx ze*g9=@3ID*?>FGaO^tAI+T;6lMpB)P>w+)He1EVKFf>eTVMuVK;0ZJV9L?%hEacc^o!t`%k=&lHNShN)1bz- zAITmG?<*Kh#yOKwUfU5#oQEeOXq~yZ_j}VXF3H8})=Lg9-E6?FURrS(g)p{4g0OAc z;fFLYC9y%_YSPN>D~ReX(74A)>7!$hZ%*W;`xb_EXpd(2`%ohmtGM-{<4#O{CyvD} zOAc)9ru!DR^c-7&FvF%Wj1N5c1=aRyb$P?LfUV@ie^9Aw4PBUcl)0q~L^3VY@1*@& z;|^mrl(`y#&Ho#X0EVa~=@kB4ms|aMzBtibkFsu)OvZHLhF#cB63>5;NdYp>->LuK zg4f?V-rw@%|BkBb$6aV9w|NGDyk5eRDwQDh&uwvWmfl@NmMW}pYdgg9B$qlY1hG~Y zs|zeJ?|=~Az|=I>G)?`zTWjk18%BMz(LjVA_;+zQ!0{kQPC0J`ah1;wFBjQ<=#4L) z6&MD}jC_EK&O6^MU9)Z7hHWsA^p1^5@!^8J=zj>O0CuF;jAm67l{MB*o_=_P{>fld zm9+1Rm$e95d0KHC;oi1`uhwncvF-mzNq}ArDUj#dj7s9Tn7KCX4{l!#ZX1lE_i;Z9 zE9`2nGTyL%uxeG`Wu0ituG{{nb1iEp!S~~=EOBr)PYQxMs>4i=cRacDQ z9HYy^yb4g=;jzL0CMD3IG(j&+G6$>7Z4o2>A>1wRaBYWHF_)QRH z?PG?gLtP;Jni2h9;6J~X|K-{fKZ{acaB;b06}PNQGj!gATlKM^@XAOwqD!Ub+ZG~~ z)-@z*wBwR)*g|EE|EOEGdaJppWAK+q&4^`$)|;Wa=NT`Uq=Sfe=?M?bL; zqf*;EFTM*jX~0^T9oe&jtcsF$@~PW90Vtk{X#Leo3zDPRD5TnOkzX(z4qq5<(g%HH z%5$cYG##U@QbK;INJpP$-CXYaZl=Sy7$N+}jA#Q8N>EacaX`xeTpUEF_oaYrM#P@; zuNgE3s((9_+vbgk15lnGHf4(i_d@Is@hP)SdS z53)vgwpq?}reMk%boZbagKb|VI{g+`R3-?yqz7OCJQ@<%%SReuCX#v5zoN&`4+L%!K!MHbmp2=5SL_;-=DNSQp3!n z_hf>XpkEKz=&tO0!pY87?HF=YoY zn}BMR&XRJf1bEOF&FxuH1s2kP;wzyk?nKN#RkHIhZh_5$zAf%fYp%_;X_0m9A!$>j zl61(m=3PIQEw)ThcX9H?*NwdNsiRBs+37;XU}OzuZ#nEGue3h0ejxa3tZVT4YqB{= zbVpUwG9u#jRB%0*Njb4Y8eW;e)r2;Ju0tB3`#TyE9*FG3N=;l*e(JLP%=@-`eXd({KpfcT`7~`OmZnYlv>YTrc*pixncU`mvP18vlazR zk?)u7com0_By54Yq9BFe_SJzNAg?zb{>;+{&LN8zMaX;XM~5NG?2kc>74Mw8=@0c* zb91Ibm5BoQdB3Gu%TuPR!XUS0p5C02I8Hs%Ri&X_Xc?t^*)mpdi7BFeD%Fo{?;i`V zrR7oZXiC>R$v$N9YtiCv>odkM4SQ?XFo@SgNG|kKv?;FVa*WcJo>qj=IkF9HmJgCU zivxvEI(2auWxFmFfo5GA&H*PIGcIO-d;w-+GB;o&TI4qIK*TLykD04l-ayMs_enI> zd_TE(WHiGW@Umqq(qJ2yz%+25?7;lMP-A(cPt4FXbuwsF^WtSavbarWIi0%t4)N|d zzWMzg*SfinIu)pFYst42qR_})GOE@Pgz0RnHO7suW4`c(ogA0b>zW%QlD}Sh{TIlpzOYiz+!rr#TvF$2^Wb z@V$oy$mSN6OC6XC0cT8Drc*Y{d{cnJb~o2sdd5BNDXCi2aJ3cr5rnDdBmB@S)Z0T} z1+DI0XgHVzY;rnTSmydE#7Ef};?*6K*{JpHM~@cAhES&0NC~{>wW1BYC%$la5eY