{
    "defs": {
        "valObjects": {
            "data_array": {
                "description": "An {array} of data. The value MUST be an {array}, or we ignore it. Note that typed arrays (e.g. Float32Array) are supported.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt"
                ]
            },
            "enumerated": {
                "description": "Enumerated value type. The available values are listed in `values`.",
                "requiredOpts": [
                    "values"
                ],
                "otherOpts": [
                    "dflt",
                    "coerceNumber",
                    "arrayOk"
                ]
            },
            "boolean": {
                "description": "A boolean (true/false) value.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt"
                ]
            },
            "number": {
                "description": "A number or a numeric value (e.g. a number inside a string). When applicable, values greater (less) than `max` (`min`) are coerced to the `dflt`.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt",
                    "min",
                    "max",
                    "arrayOk"
                ]
            },
            "integer": {
                "description": "An integer or an integer inside a string. When applicable, values greater (less) than `max` (`min`) are coerced to the `dflt`.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt",
                    "min",
                    "max",
                    "arrayOk"
                ]
            },
            "string": {
                "description": "A string value. Numbers are converted to strings except for attributes with `strict` set to true.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt",
                    "noBlank",
                    "strict",
                    "arrayOk",
                    "values"
                ]
            },
            "color": {
                "description": "A string describing color. Supported formats: - hex (e.g. '#d3d3d3') - rgb (e.g. 'rgb(255, 0, 0)') - rgba (e.g. 'rgb(255, 0, 0, 0.5)') - hsl (e.g. 'hsl(0, 100%, 50%)') - hsv (e.g. 'hsv(0, 100%, 100%)') - named colors (full list: http://www.w3.org/TR/css3-color/#svg-color)",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt",
                    "arrayOk"
                ]
            },
            "colorlist": {
                "description": "A list of colors. Must be an {array} containing valid colors.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt"
                ]
            },
            "colorscale": {
                "description": "A Plotly colorscale either picked by a name: (any of Greys, YlGnBu, Greens, YlOrRd, Bluered, RdBu, Reds, Blues, Picnic, Rainbow, Portland, Jet, Hot, Blackbody, Earth, Electric, Viridis, Cividis ) customized as an {array} of 2-element {arrays} where the first element is the normalized color level value (starting at *0* and ending at *1*), and the second item is a valid color string.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt"
                ]
            },
            "angle": {
                "description": "A number (in degree) between -180 and 180.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt"
                ]
            },
            "subplotid": {
                "description": "An id string of a subplot type (given by dflt), optionally followed by an integer >1. e.g. if dflt='geo', we can have 'geo', 'geo2', 'geo3', ...",
                "requiredOpts": [
                    "dflt"
                ],
                "otherOpts": [
                    "regex"
                ]
            },
            "flaglist": {
                "description": "A string representing a combination of flags (order does not matter here). Combine any of the available `flags` with *+*. (e.g. ('lines+markers')). Values in `extras` cannot be combined.",
                "requiredOpts": [
                    "flags"
                ],
                "otherOpts": [
                    "dflt",
                    "extras",
                    "arrayOk"
                ]
            },
            "any": {
                "description": "Any type.",
                "requiredOpts": [],
                "otherOpts": [
                    "dflt",
                    "values",
                    "arrayOk"
                ]
            },
            "info_array": {
                "description": "An {array} of plot information.",
                "requiredOpts": [
                    "items"
                ],
                "otherOpts": [
                    "dflt",
                    "freeLength",
                    "dimensions"
                ]
            }
        },
        "metaKeys": [
            "_isSubplotObj",
            "_isLinkedToArray",
            "_arrayAttrRegexps",
            "_deprecated",
            "description",
            "role",
            "editType",
            "impliedEdits"
        ],
        "editType": {
            "traces": {
                "valType": "flaglist",
                "extras": [
                    "none"
                ],
                "flags": [
                    "calc",
                    "clearAxisTypes",
                    "plot",
                    "style",
                    "markerSize",
                    "colorbars"
                ],
                "description": "trace attributes should include an `editType` string matching this flaglist. *calc* is the most extensive: a full `Plotly.plot` starting by clearing `gd.calcdata` to force it to be regenerated *clearAxisTypes* resets the types of the axes this trace is on, because new data could cause the automatic axis type detection to change. Log type will not be cleared, as that is never automatically chosen so must have been user-specified. *plot* calls `Plotly.plot` but without first clearing `gd.calcdata`. *style* only calls `module.style` (or module.editStyle) for all trace modules and redraws the legend. *markerSize* is like *style*, but propagate axis-range changes due to scatter `marker.size` *colorbars* only redraws colorbars."
            },
            "layout": {
                "valType": "flaglist",
                "extras": [
                    "none"
                ],
                "flags": [
                    "calc",
                    "plot",
                    "legend",
                    "ticks",
                    "axrange",
                    "layoutstyle",
                    "modebar",
                    "camera",
                    "arraydraw"
                ],
                "description": "layout attributes should include an `editType` string matching this flaglist. *calc* is the most extensive: a full `Plotly.plot` starting by clearing `gd.calcdata` to force it to be regenerated *plot* calls `Plotly.plot` but without first clearing `gd.calcdata`. *legend* only redraws the legend. *ticks* only redraws axis ticks, labels, and gridlines. *axrange* minimal sequence when updating axis ranges. *layoutstyle* reapplies global and SVG cartesian axis styles. *modebar* just updates the modebar. *camera* just updates the camera settings for gl3d scenes. *arraydraw* allows component arrays to invoke the redraw routines just for the component(s) that changed."
            }
        },
        "impliedEdits": {
            "description": "Sometimes when an attribute is changed, other attributes must be altered as well in order to achieve the intended result. For example, when `range` is specified, it is important to set `autorange` to `false` or the new `range` value would be lost in the redraw. `impliedEdits` is the mechanism to do this: `impliedEdits: {autorange: false}`. Each key is a relative paths to the attribute string to change, using *^* to ascend into the parent container, for example `range[0]` has `impliedEdits: {*^autorange*: false}`. A value of `undefined` means that the attribute will not be changed, but its previous value should be recorded in case we want to reverse this change later. For example, `autorange` has `impliedEdits: {*range[0]*: undefined, *range[1]*:undefined} because the range will likely be changed by redraw."
        }
    },
    "traces": {
        "scatter": {
            "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."
            },
            "attributes": {
                "type": "scatter",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates.",
                    "role": "data"
                },
                "x0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step."
                },
                "dx": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the x coordinate step. See `x0` for more info."
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates.",
                    "role": "data"
                },
                "y0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step."
                },
                "dy": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the y coordinate step. See `y0` for more info."
                },
                "stackgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "calc",
                    "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."
                },
                "orientation": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "v",
                        "h"
                    ],
                    "editType": "calc",
                    "description": "Only relevant 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`."
                },
                "groupnorm": {
                    "valType": "enumerated",
                    "values": [
                        "",
                        "fraction",
                        "percent"
                    ],
                    "dflt": "",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "stackgaps": {
                    "valType": "enumerated",
                    "values": [
                        "infer zero",
                        "interpolate"
                    ],
                    "dflt": "infer zero",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "style",
                    "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."
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "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*."
                },
                "hoveron": {
                    "valType": "flaglist",
                    "flags": [
                        "points",
                        "fills"
                    ],
                    "role": "info",
                    "editType": "style",
                    "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*."
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line width (in px)."
                    },
                    "shape": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "spline",
                            "hv",
                            "vh",
                            "hvh",
                            "vhv"
                        ],
                        "dflt": "linear",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes."
                    },
                    "smoothing": {
                        "valType": "number",
                        "min": 0,
                        "max": 1.3,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "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)."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "style",
                        "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*)."
                    },
                    "simplify": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "info",
                        "editType": "plot",
                        "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."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "cliponaxis": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "info",
                    "editType": "plot",
                    "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*."
                },
                "fill": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "tozeroy",
                        "tozerox",
                        "tonexty",
                        "tonextx",
                        "toself",
                        "tonext"
                    ],
                    "role": "style",
                    "editType": "calc",
                    "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."
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "style",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "marker": {
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the marker opacity."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "maxdisplayed": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "editType": "calc",
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "gradient": {
                        "type": {
                            "valType": "enumerated",
                            "values": [
                                "radial",
                                "horizontal",
                                "vertical",
                                "none"
                            ],
                            "arrayOk": true,
                            "dflt": "none",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the type of gradient used to fill the markers"
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "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",
                        "role": "object",
                        "typesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  type .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "role": "object",
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "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",
                    "arrayOk": true,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the text font.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "r": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "r coordinates in scatter traces are deprecated!Please switch to the *scatterpolar* trace type.Sets the radial coordinatesfor legacy polar chart only.",
                    "role": "data"
                },
                "t": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "t coordinates in scatter traces are deprecated!Please switch to the *scatterpolar* trace type.Sets the angular coordinatesfor legacy polar chart only.",
                    "role": "data"
                },
                "error_x": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "copy_ystyle": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "style",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "error_y": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "style",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                },
                "rsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  r .",
                    "editType": "none"
                },
                "tsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  t .",
                    "editType": "none"
                }
            }
        },
        "bar": {
            "meta": {
                "description": "The data visualized by the span of the bars is set in `y` if `orientation` is set th *v* (the default) and the labels are set in `x`. By setting `orientation` to *h*, the roles are interchanged."
            },
            "attributes": {
                "type": "bar",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates.",
                    "role": "data"
                },
                "x0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step."
                },
                "dx": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the x coordinate step. See `x0` for more info."
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates.",
                    "role": "data"
                },
                "y0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step."
                },
                "dy": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the y coordinate step. See `y0` for more info."
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "style",
                    "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."
                },
                "textposition": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "inside",
                        "outside",
                        "auto",
                        "none"
                    ],
                    "dflt": "none",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Specifies the location of the `text`. *inside* positions `text` inside, next to the bar end (rotated and scaled if needed). *outside* positions `text` outside, next to the bar end (scaled if needed), unless there is another bar stacked on this one, then the text gets pushed inside. *auto* tries to position `text` inside the bar, but if the bar is too small and no bar is stacked on this one the text is moved outside."
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the font used for `text`.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "insidetextfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the font used for `text` lying inside the bar.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "outsidetextfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the font used for `text` lying outside the bar.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "constraintext": {
                    "valType": "enumerated",
                    "values": [
                        "inside",
                        "outside",
                        "both",
                        "none"
                    ],
                    "role": "info",
                    "dflt": "both",
                    "editType": "calc",
                    "description": "Constrain the size of text inside or outside a bar to be no larger than the bar itself."
                },
                "cliponaxis": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "info",
                    "editType": "plot",
                    "description": "Determines whether the text nodes are clipped about the subplot axes. To show the text nodes above axis lines and tick labels, make sure to set `xaxis.layer` and `yaxis.layer` to *below traces*."
                },
                "orientation": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "v",
                        "h"
                    ],
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the orientation of the bars. With *v* (*h*), the value of the each bar spans along the vertical (horizontal)."
                },
                "base": {
                    "valType": "any",
                    "dflt": null,
                    "arrayOk": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets where the bar base is drawn (in position axis units). In *stack* or *relative* barmode, traces that set *base* will be excluded and drawn in *overlay* mode instead."
                },
                "offset": {
                    "valType": "number",
                    "dflt": null,
                    "arrayOk": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Shifts the position where the bar is drawn (in position axis units). In *group* barmode, traces that set *offset* will be excluded and drawn in *overlay* mode instead."
                },
                "width": {
                    "valType": "number",
                    "dflt": null,
                    "min": 0,
                    "arrayOk": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the bar width (in position axis units)."
                },
                "marker": {
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points.",
                            "dflt": 0
                        },
                        "editType": "calc",
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "opacity": {
                        "valType": "number",
                        "arrayOk": true,
                        "dflt": 1,
                        "min": 0,
                        "max": 1,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the opacity of the bars."
                    },
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    }
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "r": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "r coordinates in scatter traces are deprecated!Please switch to the *scatterpolar* trace type.Sets the radial coordinatesfor legacy polar chart only.",
                    "role": "data"
                },
                "t": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "t coordinates in scatter traces are deprecated!Please switch to the *scatterpolar* trace type.Sets the angular coordinatesfor legacy polar chart only.",
                    "role": "data"
                },
                "_deprecated": {
                    "bardir": {
                        "valType": "enumerated",
                        "role": "info",
                        "editType": "calc",
                        "values": [
                            "v",
                            "h"
                        ],
                        "description": "Renamed to `orientation`."
                    }
                },
                "error_x": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "copy_ystyle": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "style",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "error_y": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "style",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                },
                "basesrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  base .",
                    "editType": "none"
                },
                "offsetsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  offset .",
                    "editType": "none"
                },
                "widthsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  width .",
                    "editType": "none"
                },
                "rsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  r .",
                    "editType": "none"
                },
                "tsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  t .",
                    "editType": "none"
                }
            },
            "layoutAttributes": {
                "barmode": {
                    "valType": "enumerated",
                    "values": [
                        "stack",
                        "group",
                        "overlay",
                        "relative"
                    ],
                    "dflt": "group",
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines how bars at the same location coordinate are displayed on the graph. With *stack*, the bars are stacked on top of one another With *relative*, the bars are stacked on top of one another, with negative values below the axis, positive values above With *group*, the bars are plotted next to one another centered around the shared location. With *overlay*, the bars are plotted over one another, you might need to an *opacity* to see multiple bars."
                },
                "barnorm": {
                    "valType": "enumerated",
                    "values": [
                        "",
                        "fraction",
                        "percent"
                    ],
                    "dflt": "",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the normalization for bar traces on the graph. With *fraction*, the value of each bar is divided by the sum of all values at that location coordinate. *percent* is the same but multiplied by 100 to show percentages."
                },
                "bargap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between bars of adjacent location coordinates."
                },
                "bargroupgap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between bars of the same location coordinate."
                }
            }
        },
        "box": {
            "meta": {
                "description": "In vertical (horizontal) box plots, statistics are computed using `y` (`x`) values. By supplying an `x` (`y`) array, one box per distinct x (y) value is drawn If no `x` (`y`) {array} is provided, a single box is drawn. That box position is then positioned with with `name` or with `x0` (`y0`) if provided. Each box spans from quartile 1 (Q1) to quartile 3 (Q3). The second quartile (Q2) is marked by a line inside the box. By default, the whiskers correspond to the box' edges +/- 1.5 times the interquartile range (IQR = Q3-Q1), see *boxpoints* for other options."
            },
            "attributes": {
                "type": "box",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y sample data or coordinates. See overview for more info.",
                    "role": "data"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x sample data or coordinates. See overview for more info.",
                    "role": "data"
                },
                "x0": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinate of the box. See overview for more info."
                },
                "y0": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinate of the box. See overview for more info."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover. For box traces, the name will also be used for the position coordinate, if `x` and `x0` (`y` and `y0` if horizontal) are missing and the position axis is categorical"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets the text elements associated with each sample value. 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."
                },
                "whiskerwidth": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0.5,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the width of the whiskers relative to the box' width. For example, with 1, the whiskers are as wide as the box(es)."
                },
                "notched": {
                    "valType": "boolean",
                    "role": "style",
                    "editType": "calc",
                    "description": "Determines whether or not notches should be drawn."
                },
                "notchwidth": {
                    "valType": "number",
                    "min": 0,
                    "max": 0.5,
                    "dflt": 0.25,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the width of the notches relative to the box' width. For example, with 0, the notches are as wide as the box(es)."
                },
                "boxpoints": {
                    "valType": "enumerated",
                    "values": [
                        "all",
                        "outliers",
                        "suspectedoutliers",
                        false
                    ],
                    "dflt": "outliers",
                    "role": "style",
                    "editType": "calc",
                    "description": "If *outliers*, only the sample points lying outside the whiskers are shown If *suspectedoutliers*, the outlier points are shown and points either less than 4*Q1-3*Q3 or greater than 4*Q3-3*Q1 are highlighted (see `outliercolor`) If *all*, all sample points are shown If *false*, only the box(es) are shown with no sample points"
                },
                "boxmean": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        "sd",
                        false
                    ],
                    "dflt": false,
                    "role": "style",
                    "editType": "calc",
                    "description": "If *true*, the mean of the box(es)' underlying distribution is drawn as a dashed line inside the box(es). If *sd* the standard deviation is also drawn."
                },
                "jitter": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the amount of jitter in the sample points drawn. If *0*, the sample points align along the distribution axis. If *1*, the sample points are drawn in a random jitter of width equal to the width of the box(es)."
                },
                "pointpos": {
                    "valType": "number",
                    "min": -2,
                    "max": 2,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the position of the sample points in relation to the box(es). If *0*, the sample points are places over the center of the box(es). Positive (negative) values correspond to positions to the right (left) for vertical boxes and above (below) for horizontal boxes"
                },
                "orientation": {
                    "valType": "enumerated",
                    "values": [
                        "v",
                        "h"
                    ],
                    "role": "style",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the orientation of the box(es). If *v* (*h*), the distribution is visualized along the vertical (horizontal)."
                },
                "marker": {
                    "outliercolor": {
                        "valType": "color",
                        "dflt": "rgba(0, 0, 0, 0)",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the color of the outlier sample points."
                    },
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": false,
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": false,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the marker opacity.",
                        "dflt": 1
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "color": {
                        "valType": "color",
                        "arrayOk": false,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "arrayOk": false,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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.",
                            "dflt": "#444"
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": false,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points.",
                            "dflt": 0
                        },
                        "outliercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the border line color of the outlier sample points. Defaults to marker.color"
                        },
                        "outlierwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the border line width (in px) of the outlier sample points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the color of line bounding the box(es)."
                    },
                    "width": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 2,
                        "editType": "style",
                        "description": "Sets the width (in px) of line bounding the box(es)."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "style",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "hoveron": {
                    "valType": "flaglist",
                    "flags": [
                        "boxes",
                        "points"
                    ],
                    "dflt": "boxes+points",
                    "role": "info",
                    "editType": "style",
                    "description": "Do the hover effects highlight individual boxes  or sample points or both?"
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            },
            "layoutAttributes": {
                "boxmode": {
                    "valType": "enumerated",
                    "values": [
                        "group",
                        "overlay"
                    ],
                    "dflt": "overlay",
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines how boxes at the same location coordinate are displayed on the graph. If *group*, the boxes are plotted next to one another centered around the shared location. If *overlay*, the boxes are plotted over one another, you might need to set *opacity* to see them multiple boxes."
                },
                "boxgap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0.3,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between boxes of adjacent location coordinates."
                },
                "boxgroupgap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0.3,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between boxes of the same location coordinate."
                }
            }
        },
        "heatmap": {
            "meta": {
                "description": "The data that describes the heatmap value-to-color mapping is set in `z`. Data in `z` can either be a {2D array} of values (ragged or not) or a 1D array of values. In the case where `z` is a {2D array}, say that `z` has N rows and M columns. Then, by default, the resulting heatmap will have N partitions along the y axis and M partitions along the x axis. In other words, the i-th row/ j-th column cell in `z` is mapped to the i-th partition of the y axis (starting from the bottom of the plot) and the j-th partition of the x-axis (starting from the left of the plot). This behavior can be flipped by using `transpose`. Moreover, `x` (`y`) can be provided with M or M+1 (N or N+1) elements. If M (N), then the coordinates correspond to the center of the heatmap cells and the cells have equal width. If M+1 (N+1), then the coordinates correspond to the edges of the heatmap cells. In the case where `z` is a 1D {array}, the x and y coordinates must be provided in `x` and `y` respectively to form data triplets."
            },
            "attributes": {
                "type": "heatmap",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "z": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the z data.",
                    "role": "data"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates.",
                    "impliedEdits": {
                        "xtype": "array"
                    },
                    "role": "data"
                },
                "x0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.",
                    "impliedEdits": {
                        "xtype": "scaled"
                    }
                },
                "dx": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the x coordinate step. See `x0` for more info.",
                    "impliedEdits": {
                        "xtype": "scaled"
                    }
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates.",
                    "impliedEdits": {
                        "ytype": "array"
                    },
                    "role": "data"
                },
                "y0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.",
                    "impliedEdits": {
                        "ytype": "scaled"
                    }
                },
                "dy": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the y coordinate step. See `y0` for more info.",
                    "impliedEdits": {
                        "ytype": "scaled"
                    }
                },
                "text": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the text elements associated with each z value.",
                    "role": "data"
                },
                "transpose": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Transposes the z data."
                },
                "xtype": {
                    "valType": "enumerated",
                    "values": [
                        "array",
                        "scaled"
                    ],
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "If *array*, the heatmap's x coordinates are given by *x* (the default behavior when `x` is provided). If *scaled*, the heatmap's x coordinates are given by *x0* and *dx* (the default behavior when `x` is not provided)."
                },
                "ytype": {
                    "valType": "enumerated",
                    "values": [
                        "array",
                        "scaled"
                    ],
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "If *array*, the heatmap's y coordinates are given by *y* (the default behavior when `y` is provided) If *scaled*, the heatmap's y coordinates are given by *y0* and *dy* (the default behavior when `y` is not provided)"
                },
                "zsmooth": {
                    "valType": "enumerated",
                    "values": [
                        "fast",
                        "best",
                        false
                    ],
                    "dflt": false,
                    "role": "style",
                    "editType": "calc",
                    "description": "Picks a smoothing algorithm use to smooth `z` data."
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the `z` data are filled in."
                },
                "xgap": {
                    "valType": "number",
                    "dflt": 0,
                    "min": 0,
                    "role": "style",
                    "editType": "plot",
                    "description": "Sets the horizontal gap (in pixels) between bricks."
                },
                "ygap": {
                    "valType": "number",
                    "dflt": 0,
                    "min": 0,
                    "role": "style",
                    "editType": "plot",
                    "description": "Sets the vertical gap (in pixels) between bricks."
                },
                "zhoverformat": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. See: https://github.com/d3/d3-format/blob/master/README.md#locale_format"
                },
                "zauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here in `z`) or the bounds set in `zmin` and `zmax`  Defaults to `false` when `zmin` and `zmax` are set by the user."
                },
                "zmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "plot",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as in `z` and if set, `zmax` must be set as well."
                },
                "zmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "plot",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as in `z` and if set, `zmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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`zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "description": "Reverses the color mapping if true. If true, `zmin` will correspond to the last color in the array and `zmax` will correspond to the first color."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            }
        },
        "histogram": {
            "meta": {
                "description": "The sample data from which statistics are computed is set in `x` for vertically spanning histograms and in `y` for horizontally spanning histograms. Binning options are set `xbins` and `ybins` respectively if no aggregation data is provided."
            },
            "attributes": {
                "type": "histogram",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the sample data to be binned on the x axis.",
                    "role": "data"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the sample data to be binned on the y axis.",
                    "role": "data"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "orientation": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "v",
                        "h"
                    ],
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the orientation of the bars. With *v* (*h*), the value of the each bar spans along the vertical (horizontal)."
                },
                "histfunc": {
                    "valType": "enumerated",
                    "values": [
                        "count",
                        "sum",
                        "avg",
                        "min",
                        "max"
                    ],
                    "role": "style",
                    "dflt": "count",
                    "editType": "calc",
                    "description": "Specifies the binning function used for this histogram trace. If *count*, the histogram values are computed by counting the number of values lying inside each bin. If *sum*, *avg*, *min*, *max*, the histogram values are computed using the sum, the average, the minimum or the maximum of the values lying inside each bin respectively."
                },
                "histnorm": {
                    "valType": "enumerated",
                    "values": [
                        "",
                        "percent",
                        "probability",
                        "density",
                        "probability density"
                    ],
                    "dflt": "",
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the type of normalization used for this histogram trace. If **, the span of each bar corresponds to the number of occurrences (i.e. the number of data points lying inside the bins). If *percent* / *probability*, the span of each bar corresponds to the percentage / fraction of occurrences with respect to the total number of sample points (here, the sum of all bin HEIGHTS equals 100% / 1). If *density*, the span of each bar corresponds to the number of occurrences in a bin divided by the size of the bin interval (here, the sum of all bin AREAS equals the total number of sample points). If *probability density*, the area of each bar corresponds to the probability that an event will fall into the corresponding bin (here, the sum of all bin AREAS equals 1)."
                },
                "cumulative": {
                    "enabled": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "info",
                        "editType": "calc",
                        "description": "If true, display the cumulative distribution by summing the binned values. Use the `direction` and `centralbin` attributes to tune the accumulation method. Note: in this mode, the *density* `histnorm` settings behave the same as their equivalents without *density*: ** and *density* both rise to the number of data points, and *probability* and *probability density* both rise to the number of sample points."
                    },
                    "direction": {
                        "valType": "enumerated",
                        "values": [
                            "increasing",
                            "decreasing"
                        ],
                        "dflt": "increasing",
                        "role": "info",
                        "editType": "calc",
                        "description": "Only applies if cumulative is enabled. If *increasing* (default) we sum all prior bins, so the result increases from left to right. If *decreasing* we sum later bins so the result decreases from left to right."
                    },
                    "currentbin": {
                        "valType": "enumerated",
                        "values": [
                            "include",
                            "exclude",
                            "half"
                        ],
                        "dflt": "include",
                        "role": "info",
                        "editType": "calc",
                        "description": "Only applies if cumulative is enabled. Sets whether the current bin is included, excluded, or has half of its value included in the current cumulative value. *include* is the default for compatibility with various other tools, however it introduces a half-bin bias to the results. *exclude* makes the opposite half-bin bias, and *half* removes it."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "nbinsx": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the maximum number of desired bins. This value will be used in an algorithm that will decide the optimal bin size such that the histogram best visualizes the distribution of the data. Ignored if `xbins.size` is provided."
                },
                "xbins": {
                    "start": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the starting value for the x axis bins. Defaults to the minimum data value, shifted down if necessary to make nice round values and to remove ambiguous bin edges. For example, if most of the data is integers we shift the bin edges 0.5 down, so a `size` of 5 would have a default `start` of -0.5, so it is clear that 0-4 are in the first bin, 5-9 in the second, but continuous data gets a start of 0 and bins [0,5), [5,10) etc. Dates behave similarly, and `start` should be a date string. For category data, `start` is based on the category serial numbers, and defaults to -0.5. If multiple non-overlaying histograms share a subplot, the first explicit `start` is used exactly and all others are shifted down (if necessary) to differ from that one by an integer number of bins."
                    },
                    "end": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the end value for the x axis bins. The last bin may not end exactly at this value, we increment the bin edge by `size` from `start` until we reach or exceed `end`. Defaults to the maximum data value. Like `start`, for dates use a date string, and for category data `end` is based on the category serial numbers."
                    },
                    "size": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the size of each x axis bin. Default behavior: If `nbinsx` is 0 or omitted, we choose a nice round bin size such that the number of bins is about the same as the typical number of samples in each bin. If `nbinsx` is provided, we choose a nice round bin size giving no more than that many bins. For date data, use milliseconds or *M<n>* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). If multiple non-overlaying histograms share a subplot, the first explicit `size` is used and all others discarded. If no `size` is provided,the sample data from all traces is combined to determine `size` as described above."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "nbinsy": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the maximum number of desired bins. This value will be used in an algorithm that will decide the optimal bin size such that the histogram best visualizes the distribution of the data. Ignored if `ybins.size` is provided."
                },
                "ybins": {
                    "start": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the starting value for the y axis bins. Defaults to the minimum data value, shifted down if necessary to make nice round values and to remove ambiguous bin edges. For example, if most of the data is integers we shift the bin edges 0.5 down, so a `size` of 5 would have a default `start` of -0.5, so it is clear that 0-4 are in the first bin, 5-9 in the second, but continuous data gets a start of 0 and bins [0,5), [5,10) etc. Dates behave similarly, and `start` should be a date string. For category data, `start` is based on the category serial numbers, and defaults to -0.5. If multiple non-overlaying histograms share a subplot, the first explicit `start` is used exactly and all others are shifted down (if necessary) to differ from that one by an integer number of bins."
                    },
                    "end": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the end value for the y axis bins. The last bin may not end exactly at this value, we increment the bin edge by `size` from `start` until we reach or exceed `end`. Defaults to the maximum data value. Like `start`, for dates use a date string, and for category data `end` is based on the category serial numbers."
                    },
                    "size": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the size of each y axis bin. Default behavior: If `nbinsy` is 0 or omitted, we choose a nice round bin size such that the number of bins is about the same as the typical number of samples in each bin. If `nbinsy` is provided, we choose a nice round bin size giving no more than that many bins. For date data, use milliseconds or *M<n>* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). If multiple non-overlaying histograms share a subplot, the first explicit `size` is used and all others discarded. If no `size` is provided,the sample data from all traces is combined to determine `size` as described above."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "autobinx": {
                    "valType": "boolean",
                    "dflt": null,
                    "role": "style",
                    "editType": "calc",
                    "description": "Obsolete: since v1.42 each bin attribute is auto-determined separately and `autobinx` is not needed. However, we accept `autobinx: true` or `false` and will update `xbins` accordingly before deleting `autobinx` from the trace."
                },
                "autobiny": {
                    "valType": "boolean",
                    "dflt": null,
                    "role": "style",
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Obsolete: since v1.42 each bin attribute is auto-determined separately and `autobiny` is not needed. However, we accept `autobiny: true` or `false` and will update `ybins` accordingly before deleting `autobiny` from the trace."
                },
                "marker": {
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points.",
                            "dflt": 0
                        },
                        "editType": "calc",
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "opacity": {
                        "valType": "number",
                        "arrayOk": true,
                        "dflt": 1,
                        "min": 0,
                        "max": 1,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the opacity of the bars."
                    },
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    }
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "_deprecated": {
                    "bardir": {
                        "valType": "enumerated",
                        "role": "info",
                        "editType": "calc",
                        "values": [
                            "v",
                            "h"
                        ],
                        "description": "Renamed to `orientation`."
                    }
                },
                "error_x": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "copy_ystyle": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "style",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "error_y": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "style"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "style",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            },
            "layoutAttributes": {
                "barmode": {
                    "valType": "enumerated",
                    "values": [
                        "stack",
                        "group",
                        "overlay",
                        "relative"
                    ],
                    "dflt": "group",
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines how bars at the same location coordinate are displayed on the graph. With *stack*, the bars are stacked on top of one another With *relative*, the bars are stacked on top of one another, with negative values below the axis, positive values above With *group*, the bars are plotted next to one another centered around the shared location. With *overlay*, the bars are plotted over one another, you might need to an *opacity* to see multiple bars."
                },
                "barnorm": {
                    "valType": "enumerated",
                    "values": [
                        "",
                        "fraction",
                        "percent"
                    ],
                    "dflt": "",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the normalization for bar traces on the graph. With *fraction*, the value of each bar is divided by the sum of all values at that location coordinate. *percent* is the same but multiplied by 100 to show percentages."
                },
                "bargap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between bars of adjacent location coordinates."
                },
                "bargroupgap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between bars of the same location coordinate."
                }
            }
        },
        "histogram2d": {
            "meta": {
                "hrName": "histogram_2d",
                "description": "The sample data from which statistics are computed is set in `x` and `y` (where `x` and `y` represent marginal distributions, binning is set in `xbins` and `ybins` in this case) or `z` (where `z` represent the 2D distribution and binning set, binning is set by `x` and `y` in this case). The resulting distribution is visualized as a heatmap."
            },
            "attributes": {
                "type": "histogram2d",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the sample data to be binned on the x axis.",
                    "role": "data"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the sample data to be binned on the y axis.",
                    "role": "data"
                },
                "z": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the aggregation data.",
                    "role": "data"
                },
                "marker": {
                    "color": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the aggregation data.",
                        "role": "data"
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "histnorm": {
                    "valType": "enumerated",
                    "values": [
                        "",
                        "percent",
                        "probability",
                        "density",
                        "probability density"
                    ],
                    "dflt": "",
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the type of normalization used for this histogram trace. If **, the span of each bar corresponds to the number of occurrences (i.e. the number of data points lying inside the bins). If *percent* / *probability*, the span of each bar corresponds to the percentage / fraction of occurrences with respect to the total number of sample points (here, the sum of all bin HEIGHTS equals 100% / 1). If *density*, the span of each bar corresponds to the number of occurrences in a bin divided by the size of the bin interval (here, the sum of all bin AREAS equals the total number of sample points). If *probability density*, the area of each bar corresponds to the probability that an event will fall into the corresponding bin (here, the sum of all bin AREAS equals 1)."
                },
                "histfunc": {
                    "valType": "enumerated",
                    "values": [
                        "count",
                        "sum",
                        "avg",
                        "min",
                        "max"
                    ],
                    "role": "style",
                    "dflt": "count",
                    "editType": "calc",
                    "description": "Specifies the binning function used for this histogram trace. If *count*, the histogram values are computed by counting the number of values lying inside each bin. If *sum*, *avg*, *min*, *max*, the histogram values are computed using the sum, the average, the minimum or the maximum of the values lying inside each bin respectively."
                },
                "nbinsx": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the maximum number of desired bins. This value will be used in an algorithm that will decide the optimal bin size such that the histogram best visualizes the distribution of the data. Ignored if `xbins.size` is provided."
                },
                "xbins": {
                    "start": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the starting value for the x axis bins. Defaults to the minimum data value, shifted down if necessary to make nice round values and to remove ambiguous bin edges. For example, if most of the data is integers we shift the bin edges 0.5 down, so a `size` of 5 would have a default `start` of -0.5, so it is clear that 0-4 are in the first bin, 5-9 in the second, but continuous data gets a start of 0 and bins [0,5), [5,10) etc. Dates behave similarly, and `start` should be a date string. For category data, `start` is based on the category serial numbers, and defaults to -0.5. "
                    },
                    "end": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the end value for the x axis bins. The last bin may not end exactly at this value, we increment the bin edge by `size` from `start` until we reach or exceed `end`. Defaults to the maximum data value. Like `start`, for dates use a date string, and for category data `end` is based on the category serial numbers."
                    },
                    "size": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the size of each x axis bin. Default behavior: If `nbinsx` is 0 or omitted, we choose a nice round bin size such that the number of bins is about the same as the typical number of samples in each bin. If `nbinsx` is provided, we choose a nice round bin size giving no more than that many bins. For date data, use milliseconds or *M<n>* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). "
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "nbinsy": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the maximum number of desired bins. This value will be used in an algorithm that will decide the optimal bin size such that the histogram best visualizes the distribution of the data. Ignored if `ybins.size` is provided."
                },
                "ybins": {
                    "start": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the starting value for the y axis bins. Defaults to the minimum data value, shifted down if necessary to make nice round values and to remove ambiguous bin edges. For example, if most of the data is integers we shift the bin edges 0.5 down, so a `size` of 5 would have a default `start` of -0.5, so it is clear that 0-4 are in the first bin, 5-9 in the second, but continuous data gets a start of 0 and bins [0,5), [5,10) etc. Dates behave similarly, and `start` should be a date string. For category data, `start` is based on the category serial numbers, and defaults to -0.5. "
                    },
                    "end": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the end value for the y axis bins. The last bin may not end exactly at this value, we increment the bin edge by `size` from `start` until we reach or exceed `end`. Defaults to the maximum data value. Like `start`, for dates use a date string, and for category data `end` is based on the category serial numbers."
                    },
                    "size": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the size of each y axis bin. Default behavior: If `nbinsy` is 0 or omitted, we choose a nice round bin size such that the number of bins is about the same as the typical number of samples in each bin. If `nbinsy` is provided, we choose a nice round bin size giving no more than that many bins. For date data, use milliseconds or *M<n>* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). "
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "autobinx": {
                    "valType": "boolean",
                    "dflt": null,
                    "role": "style",
                    "editType": "calc",
                    "description": "Obsolete: since v1.42 each bin attribute is auto-determined separately and `autobinx` is not needed. However, we accept `autobinx: true` or `false` and will update `xbins` accordingly before deleting `autobinx` from the trace."
                },
                "autobiny": {
                    "valType": "boolean",
                    "dflt": null,
                    "role": "style",
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Obsolete: since v1.42 each bin attribute is auto-determined separately and `autobiny` is not needed. However, we accept `autobiny: true` or `false` and will update `ybins` accordingly before deleting `autobiny` from the trace."
                },
                "xgap": {
                    "valType": "number",
                    "dflt": 0,
                    "min": 0,
                    "role": "style",
                    "editType": "plot",
                    "description": "Sets the horizontal gap (in pixels) between bricks."
                },
                "ygap": {
                    "valType": "number",
                    "dflt": 0,
                    "min": 0,
                    "role": "style",
                    "editType": "plot",
                    "description": "Sets the vertical gap (in pixels) between bricks."
                },
                "zsmooth": {
                    "valType": "enumerated",
                    "values": [
                        "fast",
                        "best",
                        false
                    ],
                    "dflt": false,
                    "role": "style",
                    "editType": "calc",
                    "description": "Picks a smoothing algorithm use to smooth `z` data."
                },
                "zhoverformat": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. See: https://github.com/d3/d3-format/blob/master/README.md#locale_format"
                },
                "zauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here in `z`) or the bounds set in `zmin` and `zmax`  Defaults to `false` when `zmin` and `zmax` are set by the user."
                },
                "zmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "plot",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as in `z` and if set, `zmax` must be set as well."
                },
                "zmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "plot",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as in `z` and if set, `zmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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`zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "description": "Reverses the color mapping if true. If true, `zmin` will correspond to the last color in the array and `zmax` will correspond to the first color."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                }
            }
        },
        "histogram2dcontour": {
            "meta": {
                "hrName": "histogram_2d_contour",
                "description": "The sample data from which statistics are computed is set in `x` and `y` (where `x` and `y` represent marginal distributions, binning is set in `xbins` and `ybins` in this case) or `z` (where `z` represent the 2D distribution and binning set, binning is set by `x` and `y` in this case). The resulting distribution is visualized as a contour plot."
            },
            "attributes": {
                "type": "histogram2dcontour",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the sample data to be binned on the x axis.",
                    "role": "data"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the sample data to be binned on the y axis.",
                    "role": "data"
                },
                "z": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the aggregation data.",
                    "role": "data"
                },
                "marker": {
                    "color": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the aggregation data.",
                        "role": "data"
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "histnorm": {
                    "valType": "enumerated",
                    "values": [
                        "",
                        "percent",
                        "probability",
                        "density",
                        "probability density"
                    ],
                    "dflt": "",
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the type of normalization used for this histogram trace. If **, the span of each bar corresponds to the number of occurrences (i.e. the number of data points lying inside the bins). If *percent* / *probability*, the span of each bar corresponds to the percentage / fraction of occurrences with respect to the total number of sample points (here, the sum of all bin HEIGHTS equals 100% / 1). If *density*, the span of each bar corresponds to the number of occurrences in a bin divided by the size of the bin interval (here, the sum of all bin AREAS equals the total number of sample points). If *probability density*, the area of each bar corresponds to the probability that an event will fall into the corresponding bin (here, the sum of all bin AREAS equals 1)."
                },
                "histfunc": {
                    "valType": "enumerated",
                    "values": [
                        "count",
                        "sum",
                        "avg",
                        "min",
                        "max"
                    ],
                    "role": "style",
                    "dflt": "count",
                    "editType": "calc",
                    "description": "Specifies the binning function used for this histogram trace. If *count*, the histogram values are computed by counting the number of values lying inside each bin. If *sum*, *avg*, *min*, *max*, the histogram values are computed using the sum, the average, the minimum or the maximum of the values lying inside each bin respectively."
                },
                "nbinsx": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the maximum number of desired bins. This value will be used in an algorithm that will decide the optimal bin size such that the histogram best visualizes the distribution of the data. Ignored if `xbins.size` is provided."
                },
                "xbins": {
                    "start": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the starting value for the x axis bins. Defaults to the minimum data value, shifted down if necessary to make nice round values and to remove ambiguous bin edges. For example, if most of the data is integers we shift the bin edges 0.5 down, so a `size` of 5 would have a default `start` of -0.5, so it is clear that 0-4 are in the first bin, 5-9 in the second, but continuous data gets a start of 0 and bins [0,5), [5,10) etc. Dates behave similarly, and `start` should be a date string. For category data, `start` is based on the category serial numbers, and defaults to -0.5. "
                    },
                    "end": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the end value for the x axis bins. The last bin may not end exactly at this value, we increment the bin edge by `size` from `start` until we reach or exceed `end`. Defaults to the maximum data value. Like `start`, for dates use a date string, and for category data `end` is based on the category serial numbers."
                    },
                    "size": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the size of each x axis bin. Default behavior: If `nbinsx` is 0 or omitted, we choose a nice round bin size such that the number of bins is about the same as the typical number of samples in each bin. If `nbinsx` is provided, we choose a nice round bin size giving no more than that many bins. For date data, use milliseconds or *M<n>* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). "
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "nbinsy": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Specifies the maximum number of desired bins. This value will be used in an algorithm that will decide the optimal bin size such that the histogram best visualizes the distribution of the data. Ignored if `ybins.size` is provided."
                },
                "ybins": {
                    "start": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the starting value for the y axis bins. Defaults to the minimum data value, shifted down if necessary to make nice round values and to remove ambiguous bin edges. For example, if most of the data is integers we shift the bin edges 0.5 down, so a `size` of 5 would have a default `start` of -0.5, so it is clear that 0-4 are in the first bin, 5-9 in the second, but continuous data gets a start of 0 and bins [0,5), [5,10) etc. Dates behave similarly, and `start` should be a date string. For category data, `start` is based on the category serial numbers, and defaults to -0.5. "
                    },
                    "end": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the end value for the y axis bins. The last bin may not end exactly at this value, we increment the bin edge by `size` from `start` until we reach or exceed `end`. Defaults to the maximum data value. Like `start`, for dates use a date string, and for category data `end` is based on the category serial numbers."
                    },
                    "size": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the size of each y axis bin. Default behavior: If `nbinsy` is 0 or omitted, we choose a nice round bin size such that the number of bins is about the same as the typical number of samples in each bin. If `nbinsy` is provided, we choose a nice round bin size giving no more than that many bins. For date data, use milliseconds or *M<n>* for months, as in `axis.dtick`. For category data, the number of categories to bin together (always defaults to 1). "
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "autobinx": {
                    "valType": "boolean",
                    "dflt": null,
                    "role": "style",
                    "editType": "calc",
                    "description": "Obsolete: since v1.42 each bin attribute is auto-determined separately and `autobinx` is not needed. However, we accept `autobinx: true` or `false` and will update `xbins` accordingly before deleting `autobinx` from the trace."
                },
                "autobiny": {
                    "valType": "boolean",
                    "dflt": null,
                    "role": "style",
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Obsolete: since v1.42 each bin attribute is auto-determined separately and `autobiny` is not needed. However, we accept `autobiny: true` or `false` and will update `ybins` accordingly before deleting `autobiny` from the trace."
                },
                "autocontour": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "style",
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the contour level attributes are picked by an algorithm. If *true*, the number of contour levels can be set in `ncontours`. If *false*, set the contour level attributes in `contours`."
                },
                "ncontours": {
                    "valType": "integer",
                    "dflt": 15,
                    "min": 1,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the maximum number of contour levels. The actual number of contours will be chosen automatically to be less than or equal to the value of `ncontours`. Has an effect only if `autocontour` is *true* or if `contours.size` is missing."
                },
                "contours": {
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "levels",
                            "constraint"
                        ],
                        "dflt": "levels",
                        "role": "info",
                        "editType": "calc",
                        "description": "If `levels`, the data is represented as a contour plot with multiple levels displayed. If `constraint`, the data is represented as constraints with the invalid region shaded as specified by the `operation` and `value` parameters."
                    },
                    "start": {
                        "valType": "number",
                        "dflt": null,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the starting contour level value. Must be less than `contours.end`"
                    },
                    "end": {
                        "valType": "number",
                        "dflt": null,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the end contour level value. Must be more than `contours.start`"
                    },
                    "size": {
                        "valType": "number",
                        "dflt": null,
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the step between each contour level. Must be positive."
                    },
                    "coloring": {
                        "valType": "enumerated",
                        "values": [
                            "fill",
                            "heatmap",
                            "lines",
                            "none"
                        ],
                        "dflt": "fill",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines the coloring method showing the contour values. If *fill*, coloring is done evenly between each contour level If *heatmap*, a heatmap gradient coloring is applied between each contour level. If *lines*, coloring is done on the contour lines. If *none*, no coloring is applied on this trace."
                    },
                    "showlines": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the contour lines are drawn. Has an effect only if `contours.coloring` is set to *fill*."
                    },
                    "showlabels": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether to label the contour lines with their values."
                    },
                    "labelfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style"
                        },
                        "editType": "plot",
                        "description": "Sets the font used for labeling the contour levels. The default color comes from the lines, if shown. The default family and size come from `layout.font`.",
                        "role": "object"
                    },
                    "labelformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the contour label formatting rule using d3 formatting mini-language which is very similar to Python, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format."
                    },
                    "operation": {
                        "valType": "enumerated",
                        "values": [
                            "=",
                            "<",
                            ">=",
                            ">",
                            "<=",
                            "[]",
                            "()",
                            "[)",
                            "(]",
                            "][",
                            ")(",
                            "](",
                            ")["
                        ],
                        "role": "info",
                        "dflt": "=",
                        "editType": "calc",
                        "description": "Sets the constraint operation. *=* keeps regions equal to `value` *<* and *<=* keep regions less than `value` *>* and *>=* keep regions greater than `value` *[]*, *()*, *[)*, and *(]* keep regions inside `value[0]` to `value[1]` *][*, *)(*, *](*, *)[* keep regions outside `value[0]` to value[1]` Open vs. closed intervals make no difference to constraint display, but all versions are allowed for consistency with filter transforms."
                    },
                    "value": {
                        "valType": "any",
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the value or values of the constraint boundary. When `operation` is set to one of the comparison values (=,<,>=,>,<=) *value* is expected to be a number. When `operation` is set to one of the interval values ([],(),[),(],][,)(,](,)[) *value* is expected to be an array of two numbers where the first is the lower bound and the second is the upper bound."
                    },
                    "editType": "calc",
                    "impliedEdits": {
                        "autocontour": false,
                        "role": "object"
                    },
                    "role": "object"
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style+colorbars",
                        "description": "Sets the color of the contour level. Has no effect if `contours.coloring` is set to *lines*."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style+colorbars",
                        "description": "Sets the line width (in px)."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "style",
                        "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*)."
                    },
                    "smoothing": {
                        "valType": "number",
                        "min": 0,
                        "max": 1.3,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the amount of smoothing for the contour lines, where *0* corresponds to no smoothing."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "zhoverformat": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. See: https://github.com/d3/d3-format/blob/master/README.md#locale_format"
                },
                "zauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here in `z`) or the bounds set in `zmin` and `zmax`  Defaults to `false` when `zmin` and `zmax` are set by the user."
                },
                "zmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as in `z` and if set, `zmax` must be set as well."
                },
                "zmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as in `z` and if set, `zmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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`zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "description": "Reverses the color mapping if true. If true, `zmin` will correspond to the last color in the array and `zmax` will correspond to the first color."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                }
            }
        },
        "pie": {
            "meta": {
                "description": "A data visualized by the sectors of the pie is set in `values`. The sector labels are set in `labels`. The sector colors are set in `marker.colors`"
            },
            "attributes": {
                "type": "pie",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "labels": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the sector labels. If `labels` entries are duplicated, we sum associated `values` or simply count occurrences if `values` is not provided. For other array attributes (including color) we use the first non-empty entry among all occurrences of the label.",
                    "role": "data"
                },
                "label0": {
                    "valType": "number",
                    "role": "info",
                    "dflt": 0,
                    "editType": "calc",
                    "description": "Alternate to `labels`. Builds a numeric set of labels. Use with `dlabel` where `label0` is the starting label and `dlabel` the step."
                },
                "dlabel": {
                    "valType": "number",
                    "role": "info",
                    "dflt": 1,
                    "editType": "calc",
                    "description": "Sets the label step. See `label0` for more info."
                },
                "values": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the values of the sectors of this pie chart. If omitted, we count occurrences of each label.",
                    "role": "data"
                },
                "marker": {
                    "colors": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the color of each sector of this pie chart. If not specified, the default trace color set is used to pick the sector colors.",
                        "role": "data"
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "arrayOk": true,
                            "editType": "style",
                            "description": "Sets the color of the line enclosing each sector."
                        },
                        "width": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "arrayOk": true,
                            "editType": "style",
                            "description": "Sets the width (in px) of the line enclosing each sector."
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        },
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  colors .",
                        "editType": "none"
                    }
                },
                "text": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets text elements associated with each sector. If trace `textinfo` contains a *text* flag, these elements will be seen on the chart. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.",
                    "role": "data"
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "style",
                    "description": "Sets hover text elements associated with each sector. If a single string, the same string appears for all data points. If an array of string, the items are mapped in order of this trace's sectors. To be seen, trace `hoverinfo` must contain a *text* flag."
                },
                "scalegroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "calc",
                    "description": "If there are multiple pies that should be sized according to their totals, link them by providing a non-empty group id here shared by every trace in the same group."
                },
                "textinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "label",
                        "text",
                        "value",
                        "percent"
                    ],
                    "extras": [
                        "none"
                    ],
                    "editType": "calc",
                    "description": "Determines which trace information appear on the graph."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "label",
                        "text",
                        "value",
                        "percent",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "textposition": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "inside",
                        "outside",
                        "auto",
                        "none"
                    ],
                    "dflt": "auto",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Specifies the location of the `textinfo`."
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "plot",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the font used for `textinfo`.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "insidetextfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "plot",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the font used for `textinfo` lying inside the pie.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "outsidetextfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "plot",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the font used for `textinfo` lying outside the pie.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "title": {
                    "valType": "string",
                    "dflt": "",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the title of the pie chart. If it is empty, no title is displayed."
                },
                "titleposition": {
                    "valType": "enumerated",
                    "values": [
                        "top left",
                        "top center",
                        "top right",
                        "middle center",
                        "bottom left",
                        "bottom center",
                        "bottom right"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "description": "Specifies the location of the `title`."
                },
                "titlefont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "plot",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the font used for `title`.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "calc",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this pie trace (in plot fraction)."
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "calc",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this pie trace (in plot fraction)."
                    },
                    "editType": "calc",
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this pie trace ."
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this pie trace ."
                    },
                    "role": "object"
                },
                "hole": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 0,
                    "editType": "calc",
                    "description": "Sets the fraction of the radius to cut out of the pie. Use this to make a donut chart."
                },
                "sort": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not the sectors are reordered from largest to smallest."
                },
                "direction": {
                    "valType": "enumerated",
                    "values": [
                        "clockwise",
                        "counterclockwise"
                    ],
                    "role": "style",
                    "dflt": "counterclockwise",
                    "editType": "calc",
                    "description": "Specifies the direction at which succeeding sectors follow one another."
                },
                "rotation": {
                    "valType": "number",
                    "role": "style",
                    "min": -360,
                    "max": 360,
                    "dflt": 0,
                    "editType": "calc",
                    "description": "Instead of the first slice starting at 12 o'clock, rotate to some other angle."
                },
                "pull": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 0,
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets the fraction of larger radius to pull the sectors out from the center. This can be a constant to pull all slices apart from each other equally or an array to highlight one or more slices."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "labelssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  labels .",
                    "editType": "none"
                },
                "valuessrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  values .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                },
                "pullsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  pull .",
                    "editType": "none"
                }
            },
            "layoutAttributes": {
                "hiddenlabels": {
                    "valType": "data_array",
                    "editType": "calc",
                    "role": "data"
                },
                "piecolorway": {
                    "valType": "colorlist",
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the default pie slice colors. Defaults to the main `colorway` used for trace colors. If you specify a new list here it can still be extended with lighter and darker colors, see `extendpiecolors`."
                },
                "extendpiecolors": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "style",
                    "editType": "calc",
                    "description": "If `true`, the pie slice colors (whether given by `piecolorway` or inherited from `colorway`) will be extended to three times its original length by first repeating every color 20% lighter then each color 20% darker. This is intended to reduce the likelihood of reusing the same color when you have many slices, but you can set `false` to disable. Colors provided in the trace, using `marker.colors`, are never extended."
                },
                "hiddenlabelssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hiddenlabels .",
                    "editType": "none"
                }
            }
        },
        "contour": {
            "meta": {
                "description": "The data from which contour lines are computed is set in `z`. Data in `z` must be a {2D array} of numbers. Say that `z` has N rows and M columns, then by default, these N rows correspond to N y coordinates (set in `y` or auto-generated) and the M columns correspond to M x coordinates (set in `x` or auto-generated). By setting `transpose` to *true*, the above behavior is flipped."
            },
            "attributes": {
                "type": "contour",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "z": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the z data.",
                    "role": "data"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates.",
                    "impliedEdits": {
                        "xtype": "array"
                    },
                    "role": "data"
                },
                "x0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.",
                    "impliedEdits": {
                        "xtype": "scaled"
                    }
                },
                "dx": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the x coordinate step. See `x0` for more info.",
                    "impliedEdits": {
                        "xtype": "scaled"
                    }
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates.",
                    "impliedEdits": {
                        "ytype": "array"
                    },
                    "role": "data"
                },
                "y0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.",
                    "impliedEdits": {
                        "ytype": "scaled"
                    }
                },
                "dy": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the y coordinate step. See `y0` for more info.",
                    "impliedEdits": {
                        "ytype": "scaled"
                    }
                },
                "text": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the text elements associated with each z value.",
                    "role": "data"
                },
                "transpose": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Transposes the z data."
                },
                "xtype": {
                    "valType": "enumerated",
                    "values": [
                        "array",
                        "scaled"
                    ],
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "If *array*, the heatmap's x coordinates are given by *x* (the default behavior when `x` is provided). If *scaled*, the heatmap's x coordinates are given by *x0* and *dx* (the default behavior when `x` is not provided)."
                },
                "ytype": {
                    "valType": "enumerated",
                    "values": [
                        "array",
                        "scaled"
                    ],
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "If *array*, the heatmap's y coordinates are given by *y* (the default behavior when `y` is provided) If *scaled*, the heatmap's y coordinates are given by *y0* and *dy* (the default behavior when `y` is not provided)"
                },
                "zhoverformat": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. See: https://github.com/d3/d3-format/blob/master/README.md#locale_format"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the `z` data are filled in."
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the fill color if `contours.type` is *constraint*. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "autocontour": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "style",
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the contour level attributes are picked by an algorithm. If *true*, the number of contour levels can be set in `ncontours`. If *false*, set the contour level attributes in `contours`."
                },
                "ncontours": {
                    "valType": "integer",
                    "dflt": 15,
                    "min": 1,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the maximum number of contour levels. The actual number of contours will be chosen automatically to be less than or equal to the value of `ncontours`. Has an effect only if `autocontour` is *true* or if `contours.size` is missing."
                },
                "contours": {
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "levels",
                            "constraint"
                        ],
                        "dflt": "levels",
                        "role": "info",
                        "editType": "calc",
                        "description": "If `levels`, the data is represented as a contour plot with multiple levels displayed. If `constraint`, the data is represented as constraints with the invalid region shaded as specified by the `operation` and `value` parameters."
                    },
                    "start": {
                        "valType": "number",
                        "dflt": null,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the starting contour level value. Must be less than `contours.end`"
                    },
                    "end": {
                        "valType": "number",
                        "dflt": null,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the end contour level value. Must be more than `contours.start`"
                    },
                    "size": {
                        "valType": "number",
                        "dflt": null,
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the step between each contour level. Must be positive."
                    },
                    "coloring": {
                        "valType": "enumerated",
                        "values": [
                            "fill",
                            "heatmap",
                            "lines",
                            "none"
                        ],
                        "dflt": "fill",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines the coloring method showing the contour values. If *fill*, coloring is done evenly between each contour level If *heatmap*, a heatmap gradient coloring is applied between each contour level. If *lines*, coloring is done on the contour lines. If *none*, no coloring is applied on this trace."
                    },
                    "showlines": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the contour lines are drawn. Has an effect only if `contours.coloring` is set to *fill*."
                    },
                    "showlabels": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether to label the contour lines with their values."
                    },
                    "labelfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style"
                        },
                        "editType": "plot",
                        "description": "Sets the font used for labeling the contour levels. The default color comes from the lines, if shown. The default family and size come from `layout.font`.",
                        "role": "object"
                    },
                    "labelformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the contour label formatting rule using d3 formatting mini-language which is very similar to Python, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format."
                    },
                    "operation": {
                        "valType": "enumerated",
                        "values": [
                            "=",
                            "<",
                            ">=",
                            ">",
                            "<=",
                            "[]",
                            "()",
                            "[)",
                            "(]",
                            "][",
                            ")(",
                            "](",
                            ")["
                        ],
                        "role": "info",
                        "dflt": "=",
                        "editType": "calc",
                        "description": "Sets the constraint operation. *=* keeps regions equal to `value` *<* and *<=* keep regions less than `value` *>* and *>=* keep regions greater than `value` *[]*, *()*, *[)*, and *(]* keep regions inside `value[0]` to `value[1]` *][*, *)(*, *](*, *)[* keep regions outside `value[0]` to value[1]` Open vs. closed intervals make no difference to constraint display, but all versions are allowed for consistency with filter transforms."
                    },
                    "value": {
                        "valType": "any",
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the value or values of the constraint boundary. When `operation` is set to one of the comparison values (=,<,>=,>,<=) *value* is expected to be a number. When `operation` is set to one of the interval values ([],(),[),(],][,)(,](,)[) *value* is expected to be an array of two numbers where the first is the lower bound and the second is the upper bound."
                    },
                    "editType": "calc",
                    "impliedEdits": {
                        "autocontour": false,
                        "role": "object"
                    },
                    "role": "object"
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style+colorbars",
                        "description": "Sets the color of the contour level. Has no effect if `contours.coloring` is set to *lines*."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style+colorbars",
                        "description": "Sets the line width (in px)."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "style",
                        "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*)."
                    },
                    "smoothing": {
                        "valType": "number",
                        "min": 0,
                        "max": 1.3,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the amount of smoothing for the contour lines, where *0* corresponds to no smoothing."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "zauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here in `z`) or the bounds set in `zmin` and `zmax`  Defaults to `false` when `zmin` and `zmax` are set by the user."
                },
                "zmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as in `z` and if set, `zmax` must be set as well."
                },
                "zmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as in `z` and if set, `zmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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`zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "description": "Reverses the color mapping if true. If true, `zmin` will correspond to the last color in the array and `zmax` will correspond to the first color."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            }
        },
        "scatterternary": {
            "meta": {
                "hrName": "scatter_ternary",
                "description": "Provides similar functionality to the *scatter* type but on a ternary phase diagram. The data is provided by at least two arrays out of `a`, `b`, `c` triplets."
            },
            "attributes": {
                "type": "scatterternary",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "a": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary<i>.sum`.",
                    "role": "data"
                },
                "b": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary<i>.sum`.",
                    "role": "data"
                },
                "c": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary<i>.sum`.",
                    "role": "data"
                },
                "sum": {
                    "valType": "number",
                    "role": "info",
                    "dflt": 0,
                    "min": 0,
                    "editType": "calc",
                    "description": "The number each triplet should sum to, if only two of `a`, `b`, and `c` are provided. This overrides `ternary<i>.sum` to normalize this specific trace, but does not affect the values displayed on the axes. 0 (or missing) means to use ternary<i>.sum"
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "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"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c). If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "style",
                    "description": "Sets hover text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c). To be seen, trace `hoverinfo` must contain a *text* flag."
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line width (in px)."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "style",
                        "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*)."
                    },
                    "shape": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "spline"
                        ],
                        "dflt": "linear",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes."
                    },
                    "smoothing": {
                        "valType": "number",
                        "min": 0,
                        "max": 1.3,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "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)."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "cliponaxis": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "info",
                    "editType": "plot",
                    "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*."
                },
                "fill": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "toself",
                        "tonext"
                    ],
                    "role": "style",
                    "editType": "calc",
                    "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"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "style",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "marker": {
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the marker opacity."
                    },
                    "maxdisplayed": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "editType": "calc",
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "gradient": {
                        "type": {
                            "valType": "enumerated",
                            "values": [
                                "radial",
                                "horizontal",
                                "vertical",
                                "none"
                            ],
                            "arrayOk": true,
                            "dflt": "none",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the type of gradient used to fill the markers"
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "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",
                        "role": "object",
                        "typesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  type .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "role": "object",
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the text font.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "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",
                    "arrayOk": true,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "a",
                        "b",
                        "c",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoveron": {
                    "valType": "flaglist",
                    "flags": [
                        "points",
                        "fills"
                    ],
                    "role": "info",
                    "editType": "style",
                    "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*."
                },
                "subplot": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "ternary",
                    "editType": "calc",
                    "description": "Sets a reference between this trace's data coordinates and a ternary subplot. If *ternary* (the default value), the data refer to `layout.ternary`. If *ternary2*, the data refer to `layout.ternary2`, and so on."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "asrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  a .",
                    "editType": "none"
                },
                "bsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  b .",
                    "editType": "none"
                },
                "csrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  c .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "violin": {
            "meta": {
                "description": "In vertical (horizontal) violin plots, statistics are computed using `y` (`x`) values. By supplying an `x` (`y`) array, one violin per distinct x (y) value is drawn If no `x` (`y`) {array} is provided, a single violin is drawn. That violin position is then positioned with with `name` or with `x0` (`y0`) if provided."
            },
            "attributes": {
                "type": "violin",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y sample data or coordinates. See overview for more info.",
                    "role": "data"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x sample data or coordinates. See overview for more info.",
                    "role": "data"
                },
                "x0": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinate of the box. See overview for more info."
                },
                "y0": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinate of the box. See overview for more info."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover. For box traces, the name will also be used for the position coordinate, if `x` and `x0` (`y` and `y0` if horizontal) are missing and the position axis is categorical"
                },
                "orientation": {
                    "valType": "enumerated",
                    "values": [
                        "v",
                        "h"
                    ],
                    "role": "style",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the orientation of the violin(s). If *v* (*h*), the distribution is visualized along the vertical (horizontal)."
                },
                "bandwidth": {
                    "valType": "number",
                    "min": 0,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the bandwidth used to compute the kernel density estimate. By default, the bandwidth is determined by Silverman's rule of thumb."
                },
                "scalegroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "calc",
                    "description": "If there are multiple violins that should be sized according to to some metric (see `scalemode`), link them by providing a non-empty group id here shared by every trace in the same group."
                },
                "scalemode": {
                    "valType": "enumerated",
                    "values": [
                        "width",
                        "count"
                    ],
                    "dflt": "width",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the metric by which the width of each violin is determined.*width* means each violin has the same (max) width*count* means the violins are scaled by the number of sample points makingup each violin."
                },
                "spanmode": {
                    "valType": "enumerated",
                    "values": [
                        "soft",
                        "hard",
                        "manual"
                    ],
                    "dflt": "soft",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the method by which the span in data space where the density function will be computed. *soft* means the span goes from the sample's minimum value minus two bandwidths to the sample's maximum value plus two bandwidths. *hard* means the span goes from the sample's minimum to its maximum value. For custom span settings, use mode *manual* and fill in the `span` attribute."
                },
                "span": {
                    "valType": "info_array",
                    "items": [
                        {
                            "valType": "any",
                            "editType": "calc"
                        },
                        {
                            "valType": "any",
                            "editType": "calc"
                        }
                    ],
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the span in data space for which the density function will be computed. Has an effect only when `spanmode` is set to *manual*."
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the color of line bounding the violin(s)."
                    },
                    "width": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 2,
                        "editType": "style",
                        "description": "Sets the width (in px) of line bounding the violin(s)."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "style",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "points": {
                    "valType": "enumerated",
                    "values": [
                        "all",
                        "outliers",
                        "suspectedoutliers",
                        false
                    ],
                    "dflt": "outliers",
                    "role": "style",
                    "editType": "calc",
                    "description": "If *outliers*, only the sample points lying outside the whiskers are shown If *suspectedoutliers*, the outlier points are shown and points either less than 4*Q1-3*Q3 or greater than 4*Q3-3*Q1 are highlighted (see `outliercolor`) If *all*, all sample points are shown If *false*, only the violins are shown with no sample points"
                },
                "jitter": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the amount of jitter in the sample points drawn. If *0*, the sample points align along the distribution axis. If *1*, the sample points are drawn in a random jitter of width equal to the width of the violins."
                },
                "pointpos": {
                    "valType": "number",
                    "min": -2,
                    "max": 2,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the position of the sample points in relation to the violins. If *0*, the sample points are places over the center of the violins. Positive (negative) values correspond to positions to the right (left) for vertical violins and above (below) for horizontal violins."
                },
                "marker": {
                    "outliercolor": {
                        "valType": "color",
                        "dflt": "rgba(0, 0, 0, 0)",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the color of the outlier sample points."
                    },
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": false,
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": false,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the marker opacity.",
                        "dflt": 1
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "color": {
                        "valType": "color",
                        "arrayOk": false,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "arrayOk": false,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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.",
                            "dflt": "#444"
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": false,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points.",
                            "dflt": 0
                        },
                        "outliercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the border line color of the outlier sample points. Defaults to marker.color"
                        },
                        "outlierwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the border line width (in px) of the outlier sample points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets the text elements associated with each sample value. 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."
                },
                "box": {
                    "visible": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "info",
                        "editType": "plot",
                        "description": "Determines if an miniature box plot is drawn inside the violins. "
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.25,
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the width of the inner box plots relative to the violins' width. For example, with 1, the inner box plots are as wide as the violins."
                    },
                    "fillcolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the inner box plot fill color."
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the inner box plot bounding line color."
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the inner box plot bounding line width."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "meanline": {
                    "visible": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "info",
                        "editType": "plot",
                        "description": "Determines if a line corresponding to the sample's mean is shown inside the violins. If `box.visible` is turned on, the mean line is drawn inside the inner box. Otherwise, the mean line is drawn from one side of the violin to other."
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the mean line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the mean line width."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "side": {
                    "valType": "enumerated",
                    "values": [
                        "both",
                        "positive",
                        "negative"
                    ],
                    "dflt": "both",
                    "role": "info",
                    "editType": "plot",
                    "description": "Determines on which side of the position value the density function making up one half of a violin is plotted. Useful when comparing two violin traces under *overlay* mode, where one trace has `side` set to *positive* and the other to *negative*."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "hoveron": {
                    "valType": "flaglist",
                    "flags": [
                        "violins",
                        "points",
                        "kde"
                    ],
                    "dflt": "violins+points+kde",
                    "extras": [
                        "all"
                    ],
                    "role": "info",
                    "editType": "style",
                    "description": "Do the hover effects highlight individual violins or sample points or the kernel density estimate or any combination of them?"
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            },
            "layoutAttributes": {
                "violinmode": {
                    "valType": "enumerated",
                    "values": [
                        "group",
                        "overlay"
                    ],
                    "dflt": "overlay",
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines how violins at the same location coordinate are displayed on the graph. If *group*, the violins are plotted next to one another centered around the shared location. If *overlay*, the violins are plotted over one another, you might need to set *opacity* to see them multiple violins."
                },
                "violingap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0.3,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between violins of adjacent location coordinates."
                },
                "violingroupgap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0.3,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between violins of the same location coordinate."
                }
            }
        },
        "scatter3d": {
            "meta": {
                "hrName": "scatter_3d",
                "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`."
            },
            "attributes": {
                "type": "scatter3d",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates.",
                    "role": "data"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates.",
                    "role": "data"
                },
                "z": {
                    "valType": "data_array",
                    "description": "Sets the z coordinates.",
                    "editType": "calc+clearAxisTypes",
                    "role": "data"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "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"
                },
                "surfaceaxis": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        -1,
                        0,
                        1,
                        2
                    ],
                    "dflt": -1,
                    "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.",
                    "editType": "calc"
                },
                "surfacecolor": {
                    "valType": "color",
                    "role": "style",
                    "description": "Sets the surface fill color.",
                    "editType": "calc"
                },
                "projection": {
                    "x": {
                        "show": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "Sets whether or not projections are shown along the x axis.",
                            "editType": "calc"
                        },
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "max": 1,
                            "dflt": 1,
                            "description": "Sets the projection color.",
                            "editType": "calc"
                        },
                        "scale": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "max": 10,
                            "dflt": 0.6666666666666666,
                            "description": "Sets the scale factor determining the size of the projection marker points.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "y": {
                        "show": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "Sets whether or not projections are shown along the y axis.",
                            "editType": "calc"
                        },
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "max": 1,
                            "dflt": 1,
                            "description": "Sets the projection color.",
                            "editType": "calc"
                        },
                        "scale": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "max": 10,
                            "dflt": 0.6666666666666666,
                            "description": "Sets the scale factor determining the size of the projection marker points.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "z": {
                        "show": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "Sets whether or not projections are shown along the z axis.",
                            "editType": "calc"
                        },
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "max": 1,
                            "dflt": 1,
                            "description": "Sets the projection color.",
                            "editType": "calc"
                        },
                        "scale": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "max": 10,
                            "dflt": 0.6666666666666666,
                            "description": "Sets the scale factor determining the size of the projection marker points.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "line": {
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line width (in px)."
                    },
                    "dash": {
                        "valType": "enumerated",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "description": "Sets the dash style of the lines.",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets thelinecolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "marker": {
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            "circle",
                            "circle-open",
                            "square",
                            "square-open",
                            "diamond",
                            "diamond-open",
                            "cross",
                            "x"
                        ],
                        "role": "style",
                        "dflt": "circle",
                        "arrayOk": true,
                        "description": "Sets the marker symbol type.",
                        "editType": "calc"
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 8,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": false,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "calc"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "calc"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "calc"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "calc"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "calc"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "calc"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "calc"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "calc"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "calc",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "calc",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "calc",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            }
                                        ],
                                        "editType": "calc",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "calc",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "calc",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "calc",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "calc",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "calc",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "calc"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "calc",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": false,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "textposition": {
                    "valType": "enumerated",
                    "values": [
                        "top left",
                        "top center",
                        "top right",
                        "middle left",
                        "middle center",
                        "middle right",
                        "bottom left",
                        "bottom center",
                        "bottom right"
                    ],
                    "dflt": "top center",
                    "arrayOk": false,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "textfont": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": false
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    }
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "calc",
                    "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."
                },
                "error_x": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "copy_zstyle": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "calc",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "error_y": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "copy_zstyle": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "calc",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "error_z": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "calc",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "zcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `z` date data."
                },
                "scene": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "scene",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "surface": {
            "meta": {
                "description": "The data the describes the coordinates of the surface is set in `z`. Data in `z` should be a {2D array}. Coordinates in `x` and `y` can either be 1D {arrays} or {2D arrays} (e.g. to graph parametric surfaces). If not provided in `x` and `y`, the x and y coordinates are assumed to be linear starting at 0 with a unit step. The color scale corresponds to the `z` values by default. For custom color scales, use `surfacecolor` which should be a {2D array}, where its bounds can be controlled using `cmin` and `cmax`."
            },
            "attributes": {
                "type": "surface",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "z": {
                    "valType": "data_array",
                    "description": "Sets the z coordinates.",
                    "editType": "calc+clearAxisTypes",
                    "role": "data"
                },
                "x": {
                    "valType": "data_array",
                    "description": "Sets the x coordinates.",
                    "editType": "calc+clearAxisTypes",
                    "role": "data"
                },
                "y": {
                    "valType": "data_array",
                    "description": "Sets the y coordinates.",
                    "editType": "calc+clearAxisTypes",
                    "role": "data"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "description": "Sets the text elements associated with each z value. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels.",
                    "editType": "calc"
                },
                "surfacecolor": {
                    "valType": "data_array",
                    "description": "Sets the surface color values, used for setting a color scale independent of `z`.",
                    "editType": "calc",
                    "role": "data"
                },
                "cauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here z or surfacecolor) or the bounds set in `cmin` and `cmax`  Defaults to `false` when `cmin` and `cmax` are set by the user."
                },
                "cmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "cauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as z or surfacecolor and if set, `cmax` must be set as well."
                },
                "cmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "cauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as z or surfacecolor and if set, `cmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "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."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "calc"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "calc"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "calc"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "calc"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "calc"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "calc"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "calc"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "calc"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "calc"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "calc"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "calc"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "calc"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "calc",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "calc"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "calc",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "calc",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "calc"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "calc"
                                        }
                                    ],
                                    "editType": "calc",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "calc",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "calc",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "calc",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "calc",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "calc"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "calc"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "calc",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "contours": {
                    "x": {
                        "show": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "Determines whether or not contour lines about the x dimension are drawn.",
                            "editType": "calc"
                        },
                        "project": {
                            "x": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "y": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "z": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "editType": "calc",
                            "role": "object"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "description": "Sets the color of the contour lines.",
                            "editType": "calc"
                        },
                        "usecolormap": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.",
                            "editType": "calc"
                        },
                        "width": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "max": 16,
                            "dflt": 2,
                            "description": "Sets the width of the contour lines.",
                            "editType": "calc"
                        },
                        "highlight": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "description": "Determines whether or not contour lines about the x dimension are highlighted on hover.",
                            "editType": "calc"
                        },
                        "highlightcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "description": "Sets the color of the highlighted contour lines.",
                            "editType": "calc"
                        },
                        "highlightwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "max": 16,
                            "dflt": 2,
                            "description": "Sets the width of the highlighted contour lines.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "y": {
                        "show": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "Determines whether or not contour lines about the y dimension are drawn.",
                            "editType": "calc"
                        },
                        "project": {
                            "x": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "y": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "z": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "editType": "calc",
                            "role": "object"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "description": "Sets the color of the contour lines.",
                            "editType": "calc"
                        },
                        "usecolormap": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.",
                            "editType": "calc"
                        },
                        "width": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "max": 16,
                            "dflt": 2,
                            "description": "Sets the width of the contour lines.",
                            "editType": "calc"
                        },
                        "highlight": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "description": "Determines whether or not contour lines about the y dimension are highlighted on hover.",
                            "editType": "calc"
                        },
                        "highlightcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "description": "Sets the color of the highlighted contour lines.",
                            "editType": "calc"
                        },
                        "highlightwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "max": 16,
                            "dflt": 2,
                            "description": "Sets the width of the highlighted contour lines.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "z": {
                        "show": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "Determines whether or not contour lines about the z dimension are drawn.",
                            "editType": "calc"
                        },
                        "project": {
                            "x": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the x plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "y": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the y plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "z": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": false,
                                "description": "Determines whether or not these contour lines are projected on the z plane. If `highlight` is set to *true* (the default), the projected lines are shown on hover. If `show` is set to *true*, the projected lines are shown in permanence.",
                                "editType": "calc"
                            },
                            "editType": "calc",
                            "role": "object"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "description": "Sets the color of the contour lines.",
                            "editType": "calc"
                        },
                        "usecolormap": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": false,
                            "description": "An alternate to *color*. Determines whether or not the contour lines are colored using the trace *colorscale*.",
                            "editType": "calc"
                        },
                        "width": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "max": 16,
                            "dflt": 2,
                            "description": "Sets the width of the contour lines.",
                            "editType": "calc"
                        },
                        "highlight": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "description": "Determines whether or not contour lines about the z dimension are highlighted on hover.",
                            "editType": "calc"
                        },
                        "highlightcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "description": "Sets the color of the highlighted contour lines.",
                            "editType": "calc"
                        },
                        "highlightwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "max": 16,
                            "dflt": 2,
                            "description": "Sets the width of the highlighted contour lines.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "hidesurface": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": false,
                    "description": "Determines whether or not a surface is drawn. For example, set `hidesurface` to *false* `contours.x.show` to *true* and `contours.y.show` to *true* to draw a wire frame plot.",
                    "editType": "calc"
                },
                "lightposition": {
                    "x": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 10,
                        "description": "Numeric vector, representing the X coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 10000,
                        "description": "Numeric vector, representing the Y coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "z": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 0,
                        "description": "Numeric vector, representing the Z coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "lighting": {
                    "ambient": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.8,
                        "description": "Ambient light increases overall color visibility but can wash out the image.",
                        "editType": "calc"
                    },
                    "diffuse": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.8,
                        "description": "Represents the extent that incident rays are reflected in a range of angles.",
                        "editType": "calc"
                    },
                    "specular": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 2,
                        "dflt": 0.05,
                        "description": "Represents the level that incident rays are reflected in a single direction, causing shine.",
                        "editType": "calc"
                    },
                    "roughness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.5,
                        "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.",
                        "editType": "calc"
                    },
                    "fresnel": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 5,
                        "dflt": 0.2,
                        "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "description": "Sets the opacity of the surface.",
                    "editType": "calc"
                },
                "_deprecated": {
                    "zauto": {
                        "description": "Obsolete. Use `cauto` instead.",
                        "editType": "calc"
                    },
                    "zmin": {
                        "description": "Obsolete. Use `cmin` instead.",
                        "editType": "calc"
                    },
                    "zmax": {
                        "description": "Obsolete. Use `cmax` instead.",
                        "editType": "calc"
                    }
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "calc",
                    "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."
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "zcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `z` date data."
                },
                "scene": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "scene",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "surfacecolorsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  surfacecolor .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "mesh3d": {
            "meta": {
                "description": "Draws sets of triangles with coordinates given by three 1-dimensional arrays in `x`, `y`, `z` and (1) a sets of `i`, `j`, `k` indices (2) Delaunay triangulation or (3) the Alpha-shape algorithm or (4) the Convex-hull algorithm"
            },
            "attributes": {
                "type": "mesh3d",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the X coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.",
                    "role": "data"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the Y coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.",
                    "role": "data"
                },
                "z": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the Z coordinates of the vertices. The nth element of vectors `x`, `y` and `z` jointly represent the X, Y and Z coordinates of the nth vertex.",
                    "role": "data"
                },
                "i": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *first* vertex of a triangle. For example, `{i[m], j[m], k[m]}` together represent face m (triangle m) in the mesh, where `i[m] = n` points to the triplet `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `i` represents a point in space, which is the first vertex of a triangle.",
                    "role": "data"
                },
                "j": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *second* vertex of a triangle. For example, `{i[m], j[m], k[m]}`  together represent face m (triangle m) in the mesh, where `j[m] = n` points to the triplet `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `j` represents a point in space, which is the second vertex of a triangle.",
                    "role": "data"
                },
                "k": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "A vector of vertex indices, i.e. integer values between 0 and the length of the vertex vectors, representing the *third* vertex of a triangle. For example, `{i[m], j[m], k[m]}` together represent face m (triangle m) in the mesh, where `k[m] = n` points to the triplet  `{x[n], y[n], z[n]}` in the vertex arrays. Therefore, each element in `k` represents a point in space, which is the third vertex of a triangle.",
                    "role": "data"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets the text elements associated with the vertices. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels."
                },
                "delaunayaxis": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "x",
                        "y",
                        "z"
                    ],
                    "dflt": "z",
                    "editType": "calc",
                    "description": "Sets the Delaunay axis, which is the axis that is perpendicular to the surface of the Delaunay triangulation. It has an effect if `i`, `j`, `k` are not provided and `alphahull` is set to indicate Delaunay triangulation."
                },
                "alphahull": {
                    "valType": "number",
                    "role": "style",
                    "dflt": -1,
                    "editType": "calc",
                    "description": "Determines how the mesh surface triangles are derived from the set of vertices (points) represented by the `x`, `y` and `z` arrays, if the `i`, `j`, `k` arrays are not supplied. For general use of `mesh3d` it is preferred that `i`, `j`, `k` are supplied. If *-1*, Delaunay triangulation is used, which is mainly suitable if the mesh is a single, more or less layer surface that is perpendicular to `delaunayaxis`. In case the `delaunayaxis` intersects the mesh surface at more than one point it will result triangles that are very long in the dimension of `delaunayaxis`. If *>0*, the alpha-shape algorithm is used. In this case, the positive `alphahull` value signals the use of the alpha-shape algorithm, _and_ its value acts as the parameter for the mesh fitting. If *0*,  the convex-hull algorithm is used. It is suitable for convex bodies or if the intention is to enclose the `x`, `y` and `z` point set into a convex hull."
                },
                "intensity": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the vertex intensity values, used for plotting fields on meshes",
                    "role": "data"
                },
                "color": {
                    "valType": "color",
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the color of the whole mesh"
                },
                "vertexcolor": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc",
                    "description": "Sets the color of each vertex Overrides *color*."
                },
                "facecolor": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc",
                    "description": "Sets the color of each face Overrides *color* and *vertexcolor*."
                },
                "cauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here `intensity`) or the bounds set in `cmin` and `cmax`  Defaults to `false` when `cmin` and `cmax` are set by the user."
                },
                "cmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "cauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as `intensity` and if set, `cmax` must be set as well."
                },
                "cmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "cauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as `intensity` and if set, `cmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "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."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "description": "Sets the opacity of the surface.",
                    "editType": "calc"
                },
                "flatshading": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "description": "Determines whether or not normal smoothing is applied to the meshes, creating meshes with an angular, low-poly look via flat reflections."
                },
                "contour": {
                    "show": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "description": "Sets whether or not dynamic contours are shown on hover",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "#444",
                        "description": "Sets the color of the contour lines.",
                        "editType": "calc"
                    },
                    "width": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "max": 16,
                        "dflt": 2,
                        "description": "Sets the width of the contour lines.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "lightposition": {
                    "x": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 100000,
                        "description": "Numeric vector, representing the X coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 100000,
                        "description": "Numeric vector, representing the Y coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "z": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 0,
                        "description": "Numeric vector, representing the Z coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "lighting": {
                    "vertexnormalsepsilon": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 1e-12,
                        "editType": "calc",
                        "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry."
                    },
                    "facenormalsepsilon": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.000001,
                        "editType": "calc",
                        "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry."
                    },
                    "editType": "calc",
                    "ambient": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.8,
                        "description": "Ambient light increases overall color visibility but can wash out the image.",
                        "editType": "calc"
                    },
                    "diffuse": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.8,
                        "description": "Represents the extent that incident rays are reflected in a range of angles.",
                        "editType": "calc"
                    },
                    "specular": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 2,
                        "dflt": 0.05,
                        "description": "Represents the level that incident rays are reflected in a single direction, causing shine.",
                        "editType": "calc"
                    },
                    "roughness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.5,
                        "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.",
                        "editType": "calc"
                    },
                    "fresnel": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 5,
                        "dflt": 0.2,
                        "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.",
                        "editType": "calc"
                    },
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "calc",
                    "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."
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "zcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `z` date data."
                },
                "scene": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "scene",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "isrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  i .",
                    "editType": "none"
                },
                "jsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  j .",
                    "editType": "none"
                },
                "ksrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  k .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "intensitysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  intensity .",
                    "editType": "none"
                },
                "vertexcolorsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  vertexcolor .",
                    "editType": "none"
                },
                "facecolorsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  facecolor .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "cone": {
            "meta": {
                "description": "Use cone traces to visualize vector fields.  Specify a vector field using 6 1D arrays, 3 position arrays `x`, `y` and `z` and 3 vector component arrays `u`, `v`, `w`. The cones are drawn exactly at the positions given by `x`, `y` and `z`."
            },
            "attributes": {
                "type": "cone",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates of the vector field and of the displayed cones."
                },
                "y": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates of the vector field and of the displayed cones."
                },
                "z": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the z coordinates of the vector field and of the displayed cones."
                },
                "u": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the x components of the vector field.",
                    "role": "data"
                },
                "v": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the y components of the vector field.",
                    "role": "data"
                },
                "w": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the z components of the vector field.",
                    "role": "data"
                },
                "sizemode": {
                    "valType": "enumerated",
                    "values": [
                        "scaled",
                        "absolute"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "scaled",
                    "description": "Determines whether `sizeref` is set as a *scaled* (i.e unitless) scalar (normalized by the max u/v/w norm in the vector field) or as *absolute* value (in the same units as the vector field)."
                },
                "sizeref": {
                    "valType": "number",
                    "role": "info",
                    "editType": "calc",
                    "min": 0,
                    "description": "Adjusts the cone size scaling. The size of the cones is determined by their u/v/w norm multiplied a factor and `sizeref`. This factor (computed internally) corresponds to the minimum \"time\" to travel across two successive x/y/z positions at the average velocity of those two successive positions. All cones in a given trace use the same factor. With `sizemode` set to *scaled*, `sizeref` is unitless, its default value is *0.5* With `sizemode` set to *absolute*, `sizeref` has the same units as the u/v/w vector field, its the default value is half the sample's maximum vector norm."
                },
                "anchor": {
                    "valType": "enumerated",
                    "role": "info",
                    "editType": "calc",
                    "values": [
                        "tip",
                        "tail",
                        "cm",
                        "center"
                    ],
                    "dflt": "cm",
                    "description": "Sets the cones' anchor with respect to their x/y/z positions. Note that *cm* denote the cone's center of mass which corresponds to 1/4 from the tail to tip."
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets the text elements associated with the cones. If trace `hoverinfo` contains a *text* flag and *hovertext* is not set, these elements will be seen in the hover labels."
                },
                "cauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v/w norm) or the bounds set in `cmin` and `cmax`  Defaults to `false` when `cmin` and `cmax` are set by the user."
                },
                "cmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "cauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmax` must be set as well."
                },
                "cmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "cauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "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."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "description": "Sets the opacity of the surface.",
                    "editType": "calc"
                },
                "lightposition": {
                    "x": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 100000,
                        "description": "Numeric vector, representing the X coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 100000,
                        "description": "Numeric vector, representing the Y coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "z": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 0,
                        "description": "Numeric vector, representing the Z coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "lighting": {
                    "vertexnormalsepsilon": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 1e-12,
                        "editType": "calc",
                        "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry."
                    },
                    "facenormalsepsilon": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.000001,
                        "editType": "calc",
                        "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry."
                    },
                    "editType": "calc",
                    "ambient": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.8,
                        "description": "Ambient light increases overall color visibility but can wash out the image.",
                        "editType": "calc"
                    },
                    "diffuse": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.8,
                        "description": "Represents the extent that incident rays are reflected in a range of angles.",
                        "editType": "calc"
                    },
                    "specular": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 2,
                        "dflt": 0.05,
                        "description": "Represents the level that incident rays are reflected in a single direction, causing shine.",
                        "editType": "calc"
                    },
                    "roughness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.5,
                        "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.",
                        "editType": "calc"
                    },
                    "fresnel": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 5,
                        "dflt": 0.2,
                        "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.",
                        "editType": "calc"
                    },
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "u",
                        "v",
                        "w",
                        "norm",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "x+y+z+norm+text+name",
                    "editType": "calc",
                    "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."
                },
                "scene": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "scene",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "usrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  u .",
                    "editType": "none"
                },
                "vsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  v .",
                    "editType": "none"
                },
                "wsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  w .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "streamtube": {
            "meta": {
                "description": "Use a streamtube trace to visualize flow in a vector field.  Specify a vector field using 6 1D arrays of equal length, 3 position arrays `x`, `y` and `z` and 3 vector component arrays `u`, `v`, and `w`.  By default, the tubes' starting positions will be cut from the vector field's x-z plane at its minimum y value. To specify your own starting position, use attributes `starts.x`, `starts.y` and `starts.z`."
            },
            "attributes": {
                "type": "streamtube",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates of the vector field."
                },
                "y": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates of the vector field."
                },
                "z": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the z coordinates of the vector field."
                },
                "u": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the x components of the vector field.",
                    "role": "data"
                },
                "v": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the y components of the vector field.",
                    "role": "data"
                },
                "w": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the z components of the vector field.",
                    "role": "data"
                },
                "starts": {
                    "x": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the x components of the starting position of the streamtubes",
                        "role": "data"
                    },
                    "y": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the y components of the starting position of the streamtubes",
                        "role": "data"
                    },
                    "z": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the z components of the starting position of the streamtubes",
                        "role": "data"
                    },
                    "editType": "calc",
                    "role": "object",
                    "xsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  x .",
                        "editType": "none"
                    },
                    "ysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  y .",
                        "editType": "none"
                    },
                    "zsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  z .",
                        "editType": "none"
                    }
                },
                "maxdisplayed": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 1000,
                    "role": "info",
                    "editType": "calc",
                    "description": "The maximum number of displayed segments in a streamtube."
                },
                "sizeref": {
                    "valType": "number",
                    "role": "info",
                    "editType": "calc",
                    "min": 0,
                    "dflt": 1,
                    "description": "The scaling factor for the streamtubes. The default is 1, which avoids two max divergence tubes from touching at adjacent starting positions."
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "calc",
                    "description": "Sets a text element associated with this trace. If trace `hoverinfo` contains a *text* flag, this text element will be seen in all hover labels. Note that streamtube traces do not support array `text` values."
                },
                "cauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here u/v/w norm) or the bounds set in `cmin` and `cmax`  Defaults to `false` when `cmin` and `cmax` are set by the user."
                },
                "cmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "cauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmax` must be set as well."
                },
                "cmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "cauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as u/v/w norm and if set, `cmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "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."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "description": "Sets the opacity of the surface.",
                    "editType": "calc"
                },
                "lightposition": {
                    "x": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 100000,
                        "description": "Numeric vector, representing the X coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 100000,
                        "description": "Numeric vector, representing the Y coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "z": {
                        "valType": "number",
                        "role": "style",
                        "min": -100000,
                        "max": 100000,
                        "dflt": 0,
                        "description": "Numeric vector, representing the Z coordinate for each vertex.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "lighting": {
                    "vertexnormalsepsilon": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 1e-12,
                        "editType": "calc",
                        "description": "Epsilon for vertex normals calculation avoids math issues arising from degenerate geometry."
                    },
                    "facenormalsepsilon": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.000001,
                        "editType": "calc",
                        "description": "Epsilon for face normals calculation avoids math issues arising from degenerate geometry."
                    },
                    "editType": "calc",
                    "ambient": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.8,
                        "description": "Ambient light increases overall color visibility but can wash out the image.",
                        "editType": "calc"
                    },
                    "diffuse": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.8,
                        "description": "Represents the extent that incident rays are reflected in a range of angles.",
                        "editType": "calc"
                    },
                    "specular": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 2,
                        "dflt": 0.05,
                        "description": "Represents the level that incident rays are reflected in a single direction, causing shine.",
                        "editType": "calc"
                    },
                    "roughness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 1,
                        "dflt": 0.5,
                        "description": "Alters specular reflection; the rougher the surface, the wider and less contrasty the shine.",
                        "editType": "calc"
                    },
                    "fresnel": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "max": 5,
                        "dflt": 0.2,
                        "description": "Represents the reflectance as a dependency of the viewing angle; e.g. paper is reflective when viewing it from the edge of the paper (almost 90 degrees), causing shine.",
                        "editType": "calc"
                    },
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "u",
                        "v",
                        "w",
                        "norm",
                        "divergence",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "x+y+z+norm+text+name",
                    "editType": "calc",
                    "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."
                },
                "scene": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "scene",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "usrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  u .",
                    "editType": "none"
                },
                "vsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  v .",
                    "editType": "none"
                },
                "wsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  w .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "scattergeo": {
            "meta": {
                "hrName": "scatter_geo",
                "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`."
            },
            "attributes": {
                "type": "scattergeo",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "lon": {
                    "valType": "data_array",
                    "description": "Sets the longitude coordinates (in degrees East).",
                    "editType": "calc",
                    "role": "data"
                },
                "lat": {
                    "valType": "data_array",
                    "description": "Sets the latitude coordinates (in degrees North).",
                    "editType": "calc",
                    "role": "data"
                },
                "locations": {
                    "valType": "data_array",
                    "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",
                    "role": "data"
                },
                "locationmode": {
                    "valType": "enumerated",
                    "values": [
                        "ISO-3",
                        "USA-states",
                        "country names"
                    ],
                    "role": "info",
                    "dflt": "ISO-3",
                    "description": "Determines the set of locations used to match entries in `locations` to regions on the map.",
                    "editType": "calc"
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "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"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the text font.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "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",
                    "arrayOk": true,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line width (in px)."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "calc",
                        "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*)."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "marker": {
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker opacity."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "calc"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "calc"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "calc"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "calc"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "calc"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "calc"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "calc"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "calc"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "calc",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "calc",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "calc",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            }
                                        ],
                                        "editType": "calc",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "calc",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "calc",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "calc",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "calc",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "calc",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "calc"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "calc",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "editType": "calc",
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "gradient": {
                        "type": {
                            "valType": "enumerated",
                            "values": [
                                "radial",
                                "horizontal",
                                "vertical",
                                "none"
                            ],
                            "arrayOk": true,
                            "dflt": "none",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the type of gradient used to fill the markers"
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "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",
                        "role": "object",
                        "typesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  type .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "fill": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "toself"
                    ],
                    "dflt": "none",
                    "role": "style",
                    "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape.",
                    "editType": "calc"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "lon",
                        "lat",
                        "location",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "calc",
                    "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."
                },
                "geo": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "geo",
                    "editType": "calc",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "lonsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  lon .",
                    "editType": "none"
                },
                "latsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  lat .",
                    "editType": "none"
                },
                "locationssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  locations .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "choropleth": {
            "meta": {
                "description": "The data that describes the choropleth value-to-color mapping is set in `z`. The geographic locations corresponding to each value in `z` are set in `locations`."
            },
            "attributes": {
                "type": "choropleth",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "locations": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the coordinates via location IDs or names. See `locationmode` for more info.",
                    "role": "data"
                },
                "locationmode": {
                    "valType": "enumerated",
                    "values": [
                        "ISO-3",
                        "USA-states",
                        "country names"
                    ],
                    "role": "info",
                    "dflt": "ISO-3",
                    "description": "Determines the set of locations used to match entries in `locations` to regions on the map.",
                    "editType": "calc"
                },
                "z": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the color values.",
                    "role": "data"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets the text elements associated with each location."
                },
                "marker": {
                    "line": {
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the lines bounding the marker points.",
                            "dflt": 1
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        },
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        }
                    },
                    "opacity": {
                        "valType": "number",
                        "arrayOk": true,
                        "min": 0,
                        "max": 1,
                        "dflt": 1,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the opacity of the locations."
                    },
                    "editType": "calc",
                    "role": "object",
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    }
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "editType": "plot",
                        "role": "object"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "editType": "plot",
                        "role": "object"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "location",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "calc",
                    "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."
                },
                "zauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here in `z`) or the bounds set in `zmin` and `zmax`  Defaults to `false` when `zmin` and `zmax` are set by the user."
                },
                "zmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as in `z` and if set, `zmax` must be set as well."
                },
                "zmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as in `z` and if set, `zmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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`zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "description": "Reverses the color mapping if true. If true, `zmin` will correspond to the last color in the array and `zmax` will correspond to the first color."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "geo": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "geo",
                    "editType": "calc",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "locationssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  locations .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "scattergl": {
            "meta": {
                "hrName": "scatter_gl",
                "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."
            },
            "attributes": {
                "type": "scattergl",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates.",
                    "role": "data"
                },
                "x0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step."
                },
                "dx": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the x coordinate step. See `x0` for more info."
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates.",
                    "role": "data"
                },
                "y0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step."
                },
                "dy": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the y coordinate step. See `y0` for more info."
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "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",
                    "arrayOk": true,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the text font.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "description": "Determines the drawing mode for this scatter trace.",
                    "editType": "calc"
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line width (in px)."
                    },
                    "shape": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "hv",
                            "vh",
                            "hvh",
                            "vhv"
                        ],
                        "dflt": "linear",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines the line shape. The values correspond to step-wise line shapes."
                    },
                    "dash": {
                        "valType": "enumerated",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "description": "Sets the style of the lines.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "marker": {
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker opacity."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "calc"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "calc"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "calc"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "calc"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "calc"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "calc"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "calc"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "calc"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "calc",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "calc",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "calc",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            }
                                        ],
                                        "editType": "calc",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "calc",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "calc",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "calc",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "calc",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "calc",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "calc"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "calc",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        },
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    }
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "fill": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "tozeroy",
                        "tozerox",
                        "tonexty",
                        "tonextx",
                        "toself",
                        "tonext"
                    ],
                    "role": "style",
                    "editType": "calc",
                    "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"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "calc",
                    "description": "Sets the opacity of the trace."
                },
                "error_x": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "copy_ystyle": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "calc",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "error_y": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this set of error bars is visible."
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "percent",
                            "constant",
                            "sqrt",
                            "data"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "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 sqaure of the underlying data. If *array*, the bar lengths are set with data set `array`."
                    },
                    "symmetric": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "array": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the data corresponding the length of each error bar. Values are plotted relative to the underlying data.",
                        "role": "data"
                    },
                    "arrayminus": {
                        "valType": "data_array",
                        "editType": "calc",
                        "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.",
                        "role": "data"
                    },
                    "value": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "valueminus": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 10,
                        "role": "info",
                        "editType": "calc",
                        "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"
                    },
                    "traceref": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "tracerefminus": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the stoke color of the error bars."
                    },
                    "thickness": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the thickness (in px) of the error bars."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the cross-bar at both ends of the error bars."
                    },
                    "editType": "calc",
                    "_deprecated": {
                        "opacity": {
                            "valType": "number",
                            "role": "style",
                            "editType": "calc",
                            "description": "Obsolete. Use the alpha channel in error bar `color` to set the opacity."
                        }
                    },
                    "role": "object",
                    "arraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  array .",
                        "editType": "none"
                    },
                    "arrayminussrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  arrayminus .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "ycalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `y` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                }
            }
        },
        "splom": {
            "meta": {
                "description": "Splom traces generate scatter plot matrix visualizations. Each splom `dimensions` items correspond to a generated axis. Values for each of those dimensions are set in `dimensions[i].values`. Splom traces support all `scattergl` marker style attributes. Specify `layout.grid` attributes and/or layout x-axis and y-axis attributes for more control over the axis positioning and style. "
            },
            "attributes": {
                "type": "splom",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "dimensions": {
                    "items": {
                        "dimension": {
                            "visible": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": true,
                                "editType": "calc",
                                "description": "Determines whether or not this dimension is shown on the graph. Note that even visible false dimension contribute to the default grid generate by this splom trace."
                            },
                            "label": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "description": "Sets the label corresponding to this splom dimension."
                            },
                            "values": {
                                "valType": "data_array",
                                "role": "data",
                                "editType": "calc+clearAxisTypes",
                                "description": "Sets the dimension values to be plotted."
                            },
                            "axis": {
                                "type": {
                                    "valType": "enumerated",
                                    "values": [
                                        "linear",
                                        "log",
                                        "date",
                                        "category"
                                    ],
                                    "role": "info",
                                    "editType": "calc+clearAxisTypes",
                                    "description": "Sets the axis type for this dimension's generated x and y axes. Note that the axis `type` values set in layout take precedence over this attribute."
                                },
                                "editType": "calc+clearAxisTypes",
                                "role": "object"
                            },
                            "editType": "calc+clearAxisTypes",
                            "name": {
                                "valType": "string",
                                "role": "style",
                                "editType": "none",
                                "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."
                            },
                            "templateitemname": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "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`."
                            },
                            "role": "object",
                            "valuessrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  values .",
                                "editType": "none"
                            }
                        }
                    },
                    "role": "object"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets text elements associated with each (x,y) pair to appear on hover. 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."
                },
                "marker": {
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "style",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "style",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "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."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "markerSize",
                        "description": "Sets the marker size (in px)."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the marker opacity."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        },
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    }
                },
                "xaxes": {
                    "valType": "info_array",
                    "freeLength": true,
                    "role": "info",
                    "editType": "calc",
                    "items": {
                        "valType": "subplotid",
                        "regex": "/^x([2-9]|[1-9][0-9]+)?$/",
                        "editType": "plot"
                    },
                    "description": "Sets the list of x axes corresponding to dimensions of this splom trace. By default, a splom will match the first N xaxes where N is the number of input dimensions. Note that, in case where `diagonal.visible` is false and `showupperhalf` or `showlowerhalf` is false, this splom trace will generate one less x-axis and one less y-axis."
                },
                "yaxes": {
                    "valType": "info_array",
                    "freeLength": true,
                    "role": "info",
                    "editType": "calc",
                    "items": {
                        "valType": "subplotid",
                        "regex": "/^y([2-9]|[1-9][0-9]+)?$/",
                        "editType": "plot"
                    },
                    "description": "Sets the list of y axes corresponding to dimensions of this splom trace. By default, a splom will match the first N yaxes where N is the number of input dimensions. Note that, in case where `diagonal.visible` is false and `showupperhalf` or `showlowerhalf` is false, this splom trace will generate one less x-axis and one less y-axis."
                },
                "diagonal": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "description": "Determines whether or not subplots on the diagonal are displayed."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "showupperhalf": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not subplots on the upper half from the diagonal are displayed."
                },
                "showlowerhalf": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not subplots on the lower half from the diagonal are displayed."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "calc",
                    "description": "Sets the opacity of the trace."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            }
        },
        "pointcloud": {
            "meta": {
                "description": "The data visualized as a point cloud set in `x` and `y` using the WebGl plotting engine."
            },
            "attributes": {
                "type": "pointcloud",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates.",
                    "role": "data"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates.",
                    "role": "data"
                },
                "xy": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Faster alternative to specifying `x` and `y` separately. If supplied, it must be a typed `Float32Array` array that represents points such that `xy[i * 2] = x[i]` and `xy[i * 2 + 1] = y[i]`",
                    "role": "data"
                },
                "indices": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "A sequential value, 0..n, supply it to avoid creating this array inside plotting. If specified, it must be a typed `Int32Array` array. Its length must be equal to or greater than the number of points. For the best performance and memory use, create one large `indices` typed array that is guaranteed to be at least as long as the largest number of points during use, and reuse it on each `Plotly.restyle()` call.",
                    "role": "data"
                },
                "xbounds": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Specify `xbounds` in the shape of `[xMin, xMax] to avoid looping through the `xy` typed array. Use it in conjunction with `xy` and `ybounds` for the performance benefits.",
                    "role": "data"
                },
                "ybounds": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Specify `ybounds` in the shape of `[yMin, yMax] to avoid looping through the `xy` typed array. Use it in conjunction with `xy` and `xbounds` for the performance benefits.",
                    "role": "data"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "marker": {
                    "color": {
                        "valType": "color",
                        "arrayOk": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker fill color. It accepts a specific color.If the color is not fully opaque and there are hundreds of thousandsof points, it may cause slower zooming and panning."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "dflt": 1,
                        "arrayOk": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker opacity. The default value is `1` (fully opaque). If the markers are not fully opaque and there are hundreds of thousands of points, it may cause slower zooming and panning. Opacity fades the color even if `blend` is left on `false` even if there is no translucency effect in that case."
                    },
                    "blend": {
                        "valType": "boolean",
                        "dflt": null,
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines if colors are blended together for a translucency effect in case `opacity` is specified as a value less then `1`. Setting `blend` to `true` reduces zoom/pan speed if used with large numbers of points."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0.1,
                        "max": 2,
                        "dflt": 0.5,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the minimum size (in px) of the rendered marker points, effective when the `pointcloud` shows a million or more points."
                    },
                    "sizemax": {
                        "valType": "number",
                        "min": 0.1,
                        "dflt": 20,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the maximum size (in px) of the rendered marker points. Effective when the `pointcloud` shows only few points."
                    },
                    "border": {
                        "color": {
                            "valType": "color",
                            "arrayOk": false,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the stroke color. It accepts a specific color. If the color is not fully opaque and there are hundreds of thousands of points, it may cause slower zooming and panning."
                        },
                        "arearatio": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Specifies what fraction of the marker area is covered with the border."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "xysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  xy .",
                    "editType": "none"
                },
                "indicessrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  indices .",
                    "editType": "none"
                },
                "xboundssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  xbounds .",
                    "editType": "none"
                },
                "yboundssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ybounds .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            }
        },
        "heatmapgl": {
            "meta": {
                "description": "WebGL version of the heatmap trace type."
            },
            "attributes": {
                "type": "heatmapgl",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "z": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the z data.",
                    "role": "data"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the x coordinates.",
                    "impliedEdits": {
                        "xtype": "array"
                    },
                    "role": "data"
                },
                "x0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc",
                    "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.",
                    "impliedEdits": {
                        "xtype": "scaled"
                    }
                },
                "dx": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the x coordinate step. See `x0` for more info.",
                    "impliedEdits": {
                        "xtype": "scaled"
                    }
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the y coordinates.",
                    "impliedEdits": {
                        "ytype": "array"
                    },
                    "role": "data"
                },
                "y0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc",
                    "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.",
                    "impliedEdits": {
                        "ytype": "scaled"
                    }
                },
                "dy": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the y coordinate step. See `y0` for more info.",
                    "impliedEdits": {
                        "ytype": "scaled"
                    }
                },
                "text": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the text elements associated with each z value.",
                    "role": "data"
                },
                "transpose": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Transposes the z data."
                },
                "xtype": {
                    "valType": "enumerated",
                    "values": [
                        "array",
                        "scaled"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "description": "If *array*, the heatmap's x coordinates are given by *x* (the default behavior when `x` is provided). If *scaled*, the heatmap's x coordinates are given by *x0* and *dx* (the default behavior when `x` is not provided)."
                },
                "ytype": {
                    "valType": "enumerated",
                    "values": [
                        "array",
                        "scaled"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "description": "If *array*, the heatmap's y coordinates are given by *y* (the default behavior when `y` is provided) If *scaled*, the heatmap's y coordinates are given by *y0* and *dy* (the default behavior when `y` is not provided)"
                },
                "zauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here in `z`) or the bounds set in `zmin` and `zmax`  Defaults to `false` when `zmin` and `zmax` are set by the user."
                },
                "zmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as in `z` and if set, `zmax` must be set as well."
                },
                "zmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "calc",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as in `z` and if set, `zmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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`zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "description": "Reverses the color mapping if true. If true, `zmin` will correspond to the last color in the array and `zmax` will correspond to the first color."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "calc"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "calc"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "calc"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "calc"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "calc"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "calc"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "calc"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "calc"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "calc"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "calc"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "calc"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "calc"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "calc",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "calc",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "calc"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "calc",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "calc",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "calc"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "calc"
                                        }
                                    ],
                                    "editType": "calc",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "calc",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "calc",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "calc",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "calc",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "calc"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "calc"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "calc",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            }
        },
        "parcoords": {
            "meta": {
                "description": "Parallel coordinates for multidimensional exploratory data analysis. The samples are specified in `dimensions`. The colors are set in `line.color`."
            },
            "attributes": {
                "type": "parcoords",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "calc",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this parcoords trace (in plot fraction)."
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "calc",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this parcoords trace (in plot fraction)."
                    },
                    "editType": "calc",
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this parcoords trace ."
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this parcoords trace ."
                    },
                    "role": "object"
                },
                "labelfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "description": "Sets the font for the `dimension` labels.",
                    "role": "object"
                },
                "tickfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "description": "Sets the font for the `dimension` tick values.",
                    "role": "object"
                },
                "rangefont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "description": "Sets the font for the `dimension` range values.",
                    "role": "object"
                },
                "dimensions": {
                    "items": {
                        "dimension": {
                            "label": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "description": "The shown name of the dimension."
                            },
                            "tickvals": {
                                "valType": "data_array",
                                "editType": "calc",
                                "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                                "role": "data"
                            },
                            "ticktext": {
                                "valType": "data_array",
                                "editType": "calc",
                                "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                                "role": "data"
                            },
                            "tickformat": {
                                "valType": "string",
                                "dflt": "3s",
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the tick label formatting rule using d3 formatting mini-language which is similar to those of Python. See https://github.com/d3/d3-format/blob/master/README.md#locale_format"
                            },
                            "visible": {
                                "valType": "boolean",
                                "dflt": true,
                                "role": "info",
                                "editType": "calc",
                                "description": "Shows the dimension when set to `true` (the default). Hides the dimension for `false`."
                            },
                            "range": {
                                "valType": "info_array",
                                "role": "info",
                                "items": [
                                    {
                                        "valType": "number",
                                        "editType": "calc"
                                    },
                                    {
                                        "valType": "number",
                                        "editType": "calc"
                                    }
                                ],
                                "editType": "calc",
                                "description": "The domain range that represents the full, shown axis extent. Defaults to the `values` extent. Must be an array of `[fromValue, toValue]` with finite numbers as elements."
                            },
                            "constraintrange": {
                                "valType": "info_array",
                                "role": "info",
                                "freeLength": true,
                                "dimensions": "1-2",
                                "items": [
                                    {
                                        "valType": "number",
                                        "editType": "calc"
                                    },
                                    {
                                        "valType": "number",
                                        "editType": "calc"
                                    }
                                ],
                                "editType": "calc",
                                "description": "The domain range to which the filter on the dimension is constrained. Must be an array of `[fromValue, toValue]` with `fromValue <= toValue`, or if `multiselect` is not disabled, you may give an array of arrays, where each inner array is `[fromValue, toValue]`."
                            },
                            "multiselect": {
                                "valType": "boolean",
                                "dflt": true,
                                "role": "info",
                                "editType": "calc",
                                "description": "Do we allow multiple selection ranges or just a single range?"
                            },
                            "values": {
                                "valType": "data_array",
                                "role": "data",
                                "editType": "calc",
                                "description": "Dimension values. `values[n]` represents the value of the `n`th point in the dataset, therefore the `values` vector for all dimensions must be the same (longer vectors will be truncated). Each value must be a finite number."
                            },
                            "editType": "calc",
                            "description": "The dimensions (variables) of the parallel coordinates chart. 2..60 dimensions are supported.",
                            "name": {
                                "valType": "string",
                                "role": "style",
                                "editType": "none",
                                "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."
                            },
                            "templateitemname": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "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`."
                            },
                            "role": "object",
                            "tickvalssrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  tickvals .",
                                "editType": "none"
                            },
                            "ticktextsrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  ticktext .",
                                "editType": "none"
                            },
                            "valuessrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  values .",
                                "editType": "none"
                            }
                        }
                    },
                    "role": "object"
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets thelinecolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": [
                            [
                                0,
                                "#440154"
                            ],
                            [
                                0.06274509803921569,
                                "#48186a"
                            ],
                            [
                                0.12549019607843137,
                                "#472d7b"
                            ],
                            [
                                0.18823529411764706,
                                "#424086"
                            ],
                            [
                                0.25098039215686274,
                                "#3b528b"
                            ],
                            [
                                0.3137254901960784,
                                "#33638d"
                            ],
                            [
                                0.3764705882352941,
                                "#2c728e"
                            ],
                            [
                                0.4392156862745098,
                                "#26828e"
                            ],
                            [
                                0.5019607843137255,
                                "#21918c"
                            ],
                            [
                                0.5647058823529412,
                                "#1fa088"
                            ],
                            [
                                0.6274509803921569,
                                "#28ae80"
                            ],
                            [
                                0.6901960784313725,
                                "#3fbc73"
                            ],
                            [
                                0.7529411764705882,
                                "#5ec962"
                            ],
                            [
                                0.8156862745098039,
                                "#84d44b"
                            ],
                            [
                                0.8784313725490196,
                                "#addc30"
                            ],
                            [
                                0.9411764705882353,
                                "#d8e219"
                            ],
                            [
                                1,
                                "#fde725"
                            ]
                        ],
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "parcats": {
            "meta": {
                "description": "Parallel categories diagram for multidimensional categorical data."
            },
            "attributes": {
                "type": "parcats",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "calc",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this parcats trace (in plot fraction)."
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "calc",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this parcats trace (in plot fraction)."
                    },
                    "editType": "calc",
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this parcats trace ."
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this parcats trace ."
                    },
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "count",
                        "probability"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": false,
                    "dflt": "all",
                    "editType": "plot",
                    "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."
                },
                "hoveron": {
                    "valType": "enumerated",
                    "values": [
                        "category",
                        "color",
                        "dimension"
                    ],
                    "dflt": "category",
                    "role": "info",
                    "editType": "plot",
                    "description": "Sets the hover interaction mode for the parcats diagram. If `category`, hover interaction take place per category. If `color`, hover interactions take place per color per category. If `dimension`, hover interactions take place across all categories per dimension."
                },
                "arrangement": {
                    "valType": "enumerated",
                    "values": [
                        "perpendicular",
                        "freeform",
                        "fixed"
                    ],
                    "dflt": "perpendicular",
                    "role": "style",
                    "editType": "plot",
                    "description": "Sets the drag interaction mode for categories and dimensions. If `perpendicular`, the categories can only move along a line perpendicular to the paths. If `freeform`, the categories can freely move on the plane. If `fixed`, the categories and dimensions are stationary."
                },
                "bundlecolors": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "info",
                    "editType": "plot",
                    "description": "Sort paths so that like colors are bundled together within each category."
                },
                "sortpaths": {
                    "valType": "enumerated",
                    "values": [
                        "forward",
                        "backward"
                    ],
                    "dflt": "forward",
                    "role": "info",
                    "editType": "plot",
                    "description": "Sets the path sorting algorithm. If `forward`, sort paths based on dimension categories from left to right. If `backward`, sort paths based on dimensions categories from right to left."
                },
                "labelfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "description": "Sets the font for the `dimension` labels.",
                    "role": "object"
                },
                "tickfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "description": "Sets the font for the `category` labels.",
                    "role": "object"
                },
                "dimensions": {
                    "items": {
                        "dimension": {
                            "label": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "description": "The shown name of the dimension."
                            },
                            "categoryorder": {
                                "valType": "enumerated",
                                "values": [
                                    "trace",
                                    "category ascending",
                                    "category descending",
                                    "array"
                                ],
                                "dflt": "trace",
                                "role": "info",
                                "editType": "calc",
                                "description": "Specifies the ordering logic for the categories in the dimension. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                            },
                            "categoryarray": {
                                "valType": "data_array",
                                "role": "data",
                                "editType": "calc",
                                "description": "Sets the order in which categories in this dimension appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                            },
                            "ticktext": {
                                "valType": "data_array",
                                "role": "data",
                                "editType": "calc",
                                "description": "Sets alternative tick labels for the categories in this dimension. Only has an effect if `categoryorder` is set to *array*. Should be an array the same length as `categoryarray` Used with `categoryorder`."
                            },
                            "values": {
                                "valType": "data_array",
                                "role": "data",
                                "dflt": [],
                                "editType": "calc",
                                "description": "Dimension values. `values[n]` represents the category value of the `n`th point in the dataset, therefore the `values` vector for all dimensions must be the same (longer vectors will be truncated)."
                            },
                            "displayindex": {
                                "valType": "integer",
                                "role": "info",
                                "editType": "calc",
                                "description": "The display index of dimension, from left to right, zero indexed, defaults to dimension index."
                            },
                            "editType": "calc",
                            "description": "The dimensions (variables) of the parallel categories diagram.",
                            "visible": {
                                "valType": "boolean",
                                "dflt": true,
                                "role": "info",
                                "editType": "calc",
                                "description": "Shows the dimension when set to `true` (the default). Hides the dimension for `false`."
                            },
                            "role": "object",
                            "categoryarraysrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  categoryarray .",
                                "editType": "none"
                            },
                            "ticktextsrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  ticktext .",
                                "editType": "none"
                            },
                            "valuessrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  values .",
                                "editType": "none"
                            }
                        }
                    },
                    "role": "object"
                },
                "line": {
                    "editType": "calc",
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets thelinecolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "shape": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "hspline"
                        ],
                        "dflt": "linear",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the shape of the paths. If `linear`, paths are composed of straight lines. If `hspline`, paths are composed of horizontal curved splines"
                    },
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "counts": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "arrayOk": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "The number of observations represented by each state. Defaults to 1 so that each state represents one observation"
                },
                "countssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  counts .",
                    "editType": "none"
                }
            }
        },
        "scattermapbox": {
            "meta": {
                "hrName": "scatter_mapbox",
                "description": "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`."
            },
            "attributes": {
                "type": "scattermapbox",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "lon": {
                    "valType": "data_array",
                    "description": "Sets the longitude coordinates (in degrees East).",
                    "editType": "calc",
                    "role": "data"
                },
                "lat": {
                    "valType": "data_array",
                    "description": "Sets the latitude coordinates (in degrees North).",
                    "editType": "calc",
                    "role": "data"
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "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"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line width (in px)."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "marker": {
                    "symbol": {
                        "valType": "string",
                        "dflt": "circle",
                        "role": "style",
                        "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.",
                        "editType": "calc"
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker opacity."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets themarkercolor. 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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "calc"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "calc"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "calc"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "calc"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "calc"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "calc"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "calc"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "calc"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "calc",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "calc",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "calc",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            }
                                        ],
                                        "editType": "calc",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "calc",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "calc",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "calc",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "calc",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "calc",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "calc"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "calc",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "role": "object",
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "fill": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "toself"
                    ],
                    "dflt": "none",
                    "role": "style",
                    "description": "Sets the area to fill with a solid color. Use with `fillcolor` if not *none*. *toself* connects the endpoints of the trace (or each segment of the trace if it has gaps) into a closed shape.",
                    "editType": "calc"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "dflt": "Open Sans Regular, Arial Unicode MS Regular",
                        "editType": "calc"
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc"
                    },
                    "description": "Sets the icon text font. Has an effect only when `type` is set to *symbol*.",
                    "editType": "calc",
                    "role": "object"
                },
                "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",
                    "arrayOk": false,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "lon",
                        "lat",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "calc",
                    "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."
                },
                "subplot": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "mapbox",
                    "editType": "calc",
                    "description": "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "lonsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  lon .",
                    "editType": "none"
                },
                "latsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  lat .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "sankey": {
            "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."
            },
            "attributes": {
                "type": "sankey",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": false,
                    "dflt": "all",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "calc",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "calc",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "calc",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc",
                            "arrayOk": true
                        },
                        "editType": "calc",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this sankey trace (in plot fraction).",
                        "editType": "calc"
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this sankey trace (in plot fraction).",
                        "editType": "calc"
                    },
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this sankey trace .",
                        "editType": "calc"
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this sankey trace .",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "orientation": {
                    "valType": "enumerated",
                    "values": [
                        "v",
                        "h"
                    ],
                    "dflt": "h",
                    "role": "style",
                    "description": "Sets the orientation of the Sankey diagram.",
                    "editType": "calc"
                },
                "valueformat": {
                    "valType": "string",
                    "dflt": ".3s",
                    "role": "style",
                    "description": "Sets the value formatting rule using d3 formatting mini-language which is similar to those of Python. See https://github.com/d3/d3-format/blob/master/README.md#locale_format",
                    "editType": "calc"
                },
                "valuesuffix": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "description": "Adds a unit to follow the value in the hover tooltip. Add a space if a separation is necessary from the value.",
                    "editType": "calc"
                },
                "arrangement": {
                    "valType": "enumerated",
                    "values": [
                        "snap",
                        "perpendicular",
                        "freeform",
                        "fixed"
                    ],
                    "dflt": "snap",
                    "role": "style",
                    "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.",
                    "editType": "calc"
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "editType": "calc"
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc"
                    },
                    "description": "Sets the font for node labels",
                    "editType": "calc",
                    "role": "object"
                },
                "node": {
                    "label": {
                        "valType": "data_array",
                        "dflt": [],
                        "role": "data",
                        "description": "The shown name of the node.",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "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"
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "arrayOk": true,
                            "description": "Sets the color of the `line` around each `node`.",
                            "editType": "calc"
                        },
                        "width": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0.5,
                            "arrayOk": true,
                            "description": "Sets the width (in px) of the `line` around each `node`.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        },
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        }
                    },
                    "pad": {
                        "valType": "number",
                        "arrayOk": false,
                        "min": 0,
                        "dflt": 20,
                        "role": "style",
                        "description": "Sets the padding (in px) between the `nodes`.",
                        "editType": "calc"
                    },
                    "thickness": {
                        "valType": "number",
                        "arrayOk": false,
                        "min": 1,
                        "dflt": 20,
                        "role": "style",
                        "description": "Sets the thickness (in px) of the `nodes`.",
                        "editType": "calc"
                    },
                    "hoverinfo": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "none",
                            "skip"
                        ],
                        "dflt": "all",
                        "role": "info",
                        "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.",
                        "editType": "calc"
                    },
                    "hoverlabel": {
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "arrayOk": true,
                            "editType": "calc",
                            "description": "Sets the background color of the hover labels for this trace"
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "arrayOk": true,
                            "editType": "calc",
                            "description": "Sets the border color of the hover labels for this trace."
                        },
                        "font": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "editType": "calc",
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "arrayOk": true
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc",
                                "arrayOk": true
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc",
                                "arrayOk": true
                            },
                            "editType": "calc",
                            "description": "Sets the font used in hover labels.",
                            "role": "object",
                            "familysrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  family .",
                                "editType": "none"
                            },
                            "sizesrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  size .",
                                "editType": "none"
                            },
                            "colorsrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  color .",
                                "editType": "none"
                            }
                        },
                        "namelength": {
                            "valType": "integer",
                            "min": -1,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                        },
                        "editType": "calc",
                        "role": "object",
                        "bgcolorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  bgcolor .",
                            "editType": "none"
                        },
                        "bordercolorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  bordercolor .",
                            "editType": "none"
                        },
                        "namelengthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  namelength .",
                            "editType": "none"
                        }
                    },
                    "description": "The nodes of the Sankey plot.",
                    "editType": "calc",
                    "role": "object",
                    "labelsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  label .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "link": {
                    "label": {
                        "valType": "data_array",
                        "dflt": [],
                        "role": "data",
                        "description": "The shown name of the link.",
                        "editType": "calc"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "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"
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#444",
                            "arrayOk": true,
                            "description": "Sets the color of the `line` around each `link`.",
                            "editType": "calc"
                        },
                        "width": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "arrayOk": true,
                            "description": "Sets the width (in px) of the `line` around each `link`.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        },
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        }
                    },
                    "source": {
                        "valType": "data_array",
                        "role": "data",
                        "dflt": [],
                        "description": "An integer number `[0..nodes.length - 1]` that represents the source node.",
                        "editType": "calc"
                    },
                    "target": {
                        "valType": "data_array",
                        "role": "data",
                        "dflt": [],
                        "description": "An integer number `[0..nodes.length - 1]` that represents the target node.",
                        "editType": "calc"
                    },
                    "value": {
                        "valType": "data_array",
                        "dflt": [],
                        "role": "data",
                        "description": "A numeric value representing the flow volume value.",
                        "editType": "calc"
                    },
                    "hoverinfo": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "none",
                            "skip"
                        ],
                        "dflt": "all",
                        "role": "info",
                        "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.",
                        "editType": "calc"
                    },
                    "hoverlabel": {
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "arrayOk": true,
                            "editType": "calc",
                            "description": "Sets the background color of the hover labels for this trace"
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "arrayOk": true,
                            "editType": "calc",
                            "description": "Sets the border color of the hover labels for this trace."
                        },
                        "font": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "editType": "calc",
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "arrayOk": true
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc",
                                "arrayOk": true
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc",
                                "arrayOk": true
                            },
                            "editType": "calc",
                            "description": "Sets the font used in hover labels.",
                            "role": "object",
                            "familysrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  family .",
                                "editType": "none"
                            },
                            "sizesrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  size .",
                                "editType": "none"
                            },
                            "colorsrc": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the source reference on plot.ly for  color .",
                                "editType": "none"
                            }
                        },
                        "namelength": {
                            "valType": "integer",
                            "min": -1,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                        },
                        "editType": "calc",
                        "role": "object",
                        "bgcolorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  bgcolor .",
                            "editType": "none"
                        },
                        "bordercolorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  bordercolor .",
                            "editType": "none"
                        },
                        "namelengthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  namelength .",
                            "editType": "none"
                        }
                    },
                    "description": "The links of the Sankey plot.",
                    "editType": "calc",
                    "role": "object",
                    "labelsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  label .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "sourcesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  source .",
                        "editType": "none"
                    },
                    "targetsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  target .",
                        "editType": "none"
                    },
                    "valuesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  value .",
                        "editType": "none"
                    }
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                }
            }
        },
        "table": {
            "meta": {
                "description": "Table view for detailed data viewing. The data are arranged in a grid of rows and columns. Most styling can be specified for columns, rows or individual cells. Table is using a column-major order, ie. the grid is represented as a vector of column vectors."
            },
            "attributes": {
                "type": "table",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this table trace (in plot fraction).",
                        "editType": "calc"
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "calc"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this table trace (in plot fraction).",
                        "editType": "calc"
                    },
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this table trace .",
                        "editType": "calc"
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this table trace .",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "columnwidth": {
                    "valType": "number",
                    "arrayOk": true,
                    "dflt": null,
                    "role": "style",
                    "description": "The width of columns expressed as a ratio. Columns fill the available width in proportion of their specified column widths.",
                    "editType": "calc"
                },
                "columnorder": {
                    "valType": "data_array",
                    "role": "data",
                    "description": "Specifies the rendered order of the data columns; for example, a value `2` at position `0` means that column index `0` in the data will be rendered as the third column, as columns have an index base of zero.",
                    "editType": "calc"
                },
                "header": {
                    "values": {
                        "valType": "data_array",
                        "role": "data",
                        "dflt": [],
                        "description": "Header cell values. `values[m][n]` represents the value of the `n`th point in column `m`, therefore the `values[m]` vector length for all columns must be the same (longer vectors will be truncated). Each value must be a finite number or a string.",
                        "editType": "calc"
                    },
                    "format": {
                        "valType": "data_array",
                        "role": "data",
                        "dflt": [],
                        "description": "Sets the cell value formatting rule using d3 formatting mini-language which is similar to those of Python. See https://github.com/d3/d3-format/blob/master/README.md#locale_format",
                        "editType": "calc"
                    },
                    "prefix": {
                        "valType": "string",
                        "arrayOk": true,
                        "dflt": null,
                        "role": "style",
                        "description": "Prefix for cell values.",
                        "editType": "calc"
                    },
                    "suffix": {
                        "valType": "string",
                        "arrayOk": true,
                        "dflt": null,
                        "role": "style",
                        "description": "Suffix for cell values.",
                        "editType": "calc"
                    },
                    "height": {
                        "valType": "number",
                        "dflt": 28,
                        "role": "style",
                        "description": "The height of cells.",
                        "editType": "calc"
                    },
                    "align": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "center",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the horizontal alignment of the `text` within the box. Has an effect only if `text` spans more two or more lines (i.e. `text` contains one or more <br> HTML tags) or if an explicit width is set to override the text width.",
                        "arrayOk": true
                    },
                    "line": {
                        "width": {
                            "valType": "number",
                            "arrayOk": true,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "dflt": "grey",
                            "role": "style",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "fill": {
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "dflt": "white",
                            "role": "style",
                            "description": "Sets the cell fill color. It accepts either a specific color or an array of colors.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true,
                            "editType": "calc"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "arrayOk": true,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "arrayOk": true,
                            "editType": "calc"
                        },
                        "description": "",
                        "editType": "calc",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "role": "object",
                    "valuessrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  values .",
                        "editType": "none"
                    },
                    "formatsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  format .",
                        "editType": "none"
                    },
                    "prefixsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  prefix .",
                        "editType": "none"
                    },
                    "suffixsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  suffix .",
                        "editType": "none"
                    },
                    "alignsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  align .",
                        "editType": "none"
                    }
                },
                "cells": {
                    "values": {
                        "valType": "data_array",
                        "role": "data",
                        "dflt": [],
                        "description": "Cell values. `values[m][n]` represents the value of the `n`th point in column `m`, therefore the `values[m]` vector length for all columns must be the same (longer vectors will be truncated). Each value must be a finite number or a string.",
                        "editType": "calc"
                    },
                    "format": {
                        "valType": "data_array",
                        "role": "data",
                        "dflt": [],
                        "description": "Sets the cell value formatting rule using d3 formatting mini-language which is similar to those of Python. See https://github.com/d3/d3-format/blob/master/README.md#locale_format",
                        "editType": "calc"
                    },
                    "prefix": {
                        "valType": "string",
                        "arrayOk": true,
                        "dflt": null,
                        "role": "style",
                        "description": "Prefix for cell values.",
                        "editType": "calc"
                    },
                    "suffix": {
                        "valType": "string",
                        "arrayOk": true,
                        "dflt": null,
                        "role": "style",
                        "description": "Suffix for cell values.",
                        "editType": "calc"
                    },
                    "height": {
                        "valType": "number",
                        "dflt": 20,
                        "role": "style",
                        "description": "The height of cells.",
                        "editType": "calc"
                    },
                    "align": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "center",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the horizontal alignment of the `text` within the box. Has an effect only if `text` spans more two or more lines (i.e. `text` contains one or more <br> HTML tags) or if an explicit width is set to override the text width.",
                        "arrayOk": true
                    },
                    "line": {
                        "width": {
                            "valType": "number",
                            "arrayOk": true,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "dflt": "grey",
                            "role": "style",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "fill": {
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "dflt": "white",
                            "description": "Sets the cell fill color. It accepts either a specific color or an array of colors.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true,
                            "editType": "calc"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "arrayOk": true,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "arrayOk": true,
                            "editType": "calc"
                        },
                        "description": "",
                        "editType": "calc",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "role": "object",
                    "valuessrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  values .",
                        "editType": "none"
                    },
                    "formatsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  format .",
                        "editType": "none"
                    },
                    "prefixsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  prefix .",
                        "editType": "none"
                    },
                    "suffixsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  suffix .",
                        "editType": "none"
                    },
                    "alignsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  align .",
                        "editType": "none"
                    }
                },
                "editType": "calc",
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "columnwidthsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  columnwidth .",
                    "editType": "none"
                },
                "columnordersrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  columnorder .",
                    "editType": "none"
                }
            }
        },
        "carpet": {
            "meta": {
                "description": "The data describing carpet axis layout is set in `y` and (optionally) also `x`. If only `y` is present, `x` the plot is interpreted as a cheater plot and is filled in using the `y` values. `x` and `y` may either be 2D arrays matching with each dimension matching that of `a` and `b`, or they may be 1D arrays with total length equal to that of `a` and `b`."
            },
            "attributes": {
                "type": "carpet",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "carpet": {
                    "valType": "string",
                    "role": "info",
                    "editType": "calc",
                    "description": "An identifier for this carpet, so that `scattercarpet` and `scattercontour` traces can specify a carpet plot on which they lie"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "A two dimensional array of x coordinates at each carpet point. If ommitted, the plot is a cheater plot and the xaxis is hidden by default.",
                    "role": "data"
                },
                "y": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "A two dimensional array of y coordinates at each carpet point.",
                    "role": "data"
                },
                "a": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "An array containing values of the first parameter value",
                    "role": "data"
                },
                "a0": {
                    "valType": "number",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc",
                    "description": "Alternate to `a`. Builds a linear space of a coordinates. Use with `da` where `a0` is the starting coordinate and `da` the step."
                },
                "da": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the a coordinate step. See `a0` for more info."
                },
                "b": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "A two dimensional array of y coordinates at each carpet point.",
                    "role": "data"
                },
                "b0": {
                    "valType": "number",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc",
                    "description": "Alternate to `b`. Builds a linear space of a coordinates. Use with `db` where `b0` is the starting coordinate and `db` the step."
                },
                "db": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the b coordinate step. See `b0` for more info."
                },
                "cheaterslope": {
                    "valType": "number",
                    "role": "info",
                    "dflt": 1,
                    "editType": "calc",
                    "description": "The shift applied to each successive row of data in creating a cheater plot. Only used if `x` is been ommitted."
                },
                "aaxis": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "smoothing": {
                        "valType": "number",
                        "dflt": 1,
                        "min": 0,
                        "max": 1.3,
                        "role": "info",
                        "editType": "calc"
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the title of this axis."
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "calc",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "titleoffset": {
                        "valType": "number",
                        "role": "info",
                        "dflt": 10,
                        "editType": "calc",
                        "description": "An additional amount by which to offset the title from the tick labels, given in pixels"
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "-",
                            "linear",
                            "date",
                            "category"
                        ],
                        "dflt": "-",
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question."
                    },
                    "autorange": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            false,
                            "reversed"
                        ],
                        "dflt": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not the range of this axis is computed in relation to the input data. See `rangemode` for more info. If `range` is provided, then `autorange` is set to *false*."
                    },
                    "rangemode": {
                        "valType": "enumerated",
                        "values": [
                            "normal",
                            "tozero",
                            "nonnegative"
                        ],
                        "dflt": "normal",
                        "role": "style",
                        "editType": "calc",
                        "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data."
                    },
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "calc",
                        "items": [
                            {
                                "valType": "any",
                                "editType": "calc"
                            },
                            {
                                "valType": "any",
                                "editType": "calc"
                            }
                        ],
                        "description": "Sets the range of this axis. If the axis `type` is *log*, then you must take the log of your desired range (e.g. to set the range from 1 to 100, set the range from 0 to 2). If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                    },
                    "fixedrange": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this axis is zoom-able. If true, then zoom is disabled."
                    },
                    "cheatertype": {
                        "valType": "enumerated",
                        "values": [
                            "index",
                            "value"
                        ],
                        "dflt": "value",
                        "role": "info",
                        "editType": "calc"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "array"
                        ],
                        "dflt": "array",
                        "role": "info",
                        "editType": "calc"
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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*."
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "showticklabels": {
                        "valType": "enumerated",
                        "values": [
                            "start",
                            "end",
                            "both",
                            "none"
                        ],
                        "dflt": "start",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether axis labels are drawn on the low side, the high side, both, or neither side of the axis."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "calc",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "calc",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "calc"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "calc"
                                        }
                                    ],
                                    "editType": "calc",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "calc",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "calc",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "calc",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "calc",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "categoryorder": {
                        "valType": "enumerated",
                        "values": [
                            "trace",
                            "category ascending",
                            "category descending",
                            "array"
                        ],
                        "dflt": "trace",
                        "role": "info",
                        "editType": "calc",
                        "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                    },
                    "categoryarray": {
                        "valType": "data_array",
                        "role": "data",
                        "editType": "calc",
                        "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                    },
                    "labelpadding": {
                        "valType": "integer",
                        "role": "style",
                        "dflt": 10,
                        "editType": "calc",
                        "description": "Extra padding between label and the axis"
                    },
                    "labelprefix": {
                        "valType": "string",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a axis label prefix."
                    },
                    "labelsuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a axis label suffix."
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "gridcolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the axis line color."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark."
                    },
                    "minorgridcount": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the number of minor grid ticks per major grid tick"
                    },
                    "minorgridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "minorgridcolor": {
                        "valType": "color",
                        "dflt": "#eee",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the color of the grid lines."
                    },
                    "startline": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not a line is drawn at along the starting value of this axis. If *true*, the start line is drawn on top of the grid lines."
                    },
                    "startlinecolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line color of the start line."
                    },
                    "startlinewidth": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the start line."
                    },
                    "endline": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not a line is drawn at along the final value of this axis. If *true*, the end line is drawn on top of the grid lines."
                    },
                    "endlinewidth": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the end line."
                    },
                    "endlinecolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line color of the end line."
                    },
                    "tick0": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "The starting index of grid lines along the axis"
                    },
                    "dtick": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stride between grid lines along the axis"
                    },
                    "arraytick0": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "The starting index of grid lines along the axis"
                    },
                    "arraydtick": {
                        "valType": "integer",
                        "min": 1,
                        "dflt": 1,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stride between grid lines along the axis"
                    },
                    "editType": "calc",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    },
                    "categoryarraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  categoryarray .",
                        "editType": "none"
                    }
                },
                "baxis": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "smoothing": {
                        "valType": "number",
                        "dflt": 1,
                        "min": 0,
                        "max": 1.3,
                        "role": "info",
                        "editType": "calc"
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the title of this axis."
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "calc",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "titleoffset": {
                        "valType": "number",
                        "role": "info",
                        "dflt": 10,
                        "editType": "calc",
                        "description": "An additional amount by which to offset the title from the tick labels, given in pixels"
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "-",
                            "linear",
                            "date",
                            "category"
                        ],
                        "dflt": "-",
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question."
                    },
                    "autorange": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            false,
                            "reversed"
                        ],
                        "dflt": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not the range of this axis is computed in relation to the input data. See `rangemode` for more info. If `range` is provided, then `autorange` is set to *false*."
                    },
                    "rangemode": {
                        "valType": "enumerated",
                        "values": [
                            "normal",
                            "tozero",
                            "nonnegative"
                        ],
                        "dflt": "normal",
                        "role": "style",
                        "editType": "calc",
                        "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data."
                    },
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "calc",
                        "items": [
                            {
                                "valType": "any",
                                "editType": "calc"
                            },
                            {
                                "valType": "any",
                                "editType": "calc"
                            }
                        ],
                        "description": "Sets the range of this axis. If the axis `type` is *log*, then you must take the log of your desired range (e.g. to set the range from 1 to 100, set the range from 0 to 2). If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                    },
                    "fixedrange": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not this axis is zoom-able. If true, then zoom is disabled."
                    },
                    "cheatertype": {
                        "valType": "enumerated",
                        "values": [
                            "index",
                            "value"
                        ],
                        "dflt": "value",
                        "role": "info",
                        "editType": "calc"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "array"
                        ],
                        "dflt": "array",
                        "role": "info",
                        "editType": "calc"
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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*."
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "showticklabels": {
                        "valType": "enumerated",
                        "values": [
                            "start",
                            "end",
                            "both",
                            "none"
                        ],
                        "dflt": "start",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether axis labels are drawn on the low side, the high side, both, or neither side of the axis."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "calc",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "calc"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "calc",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "calc"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "calc"
                                        }
                                    ],
                                    "editType": "calc",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "calc",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "calc",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "calc",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "calc",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "categoryorder": {
                        "valType": "enumerated",
                        "values": [
                            "trace",
                            "category ascending",
                            "category descending",
                            "array"
                        ],
                        "dflt": "trace",
                        "role": "info",
                        "editType": "calc",
                        "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                    },
                    "categoryarray": {
                        "valType": "data_array",
                        "role": "data",
                        "editType": "calc",
                        "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                    },
                    "labelpadding": {
                        "valType": "integer",
                        "role": "style",
                        "dflt": 10,
                        "editType": "calc",
                        "description": "Extra padding between label and the axis"
                    },
                    "labelprefix": {
                        "valType": "string",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a axis label prefix."
                    },
                    "labelsuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets a axis label suffix."
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "gridcolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the axis line color."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark."
                    },
                    "minorgridcount": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the number of minor grid ticks per major grid tick"
                    },
                    "minorgridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "minorgridcolor": {
                        "valType": "color",
                        "dflt": "#eee",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the color of the grid lines."
                    },
                    "startline": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not a line is drawn at along the starting value of this axis. If *true*, the start line is drawn on top of the grid lines."
                    },
                    "startlinecolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line color of the start line."
                    },
                    "startlinewidth": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the start line."
                    },
                    "endline": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines whether or not a line is drawn at along the final value of this axis. If *true*, the end line is drawn on top of the grid lines."
                    },
                    "endlinewidth": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the width (in px) of the end line."
                    },
                    "endlinecolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line color of the end line."
                    },
                    "tick0": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "The starting index of grid lines along the axis"
                    },
                    "dtick": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stride between grid lines along the axis"
                    },
                    "arraytick0": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "The starting index of grid lines along the axis"
                    },
                    "arraydtick": {
                        "valType": "integer",
                        "min": 1,
                        "dflt": 1,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stride between grid lines along the axis"
                    },
                    "editType": "calc",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    },
                    "categoryarraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  categoryarray .",
                        "editType": "none"
                    }
                },
                "font": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "dflt": "\"Open Sans\", verdana, arial, sans-serif"
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "dflt": 12
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "dflt": "#444"
                    },
                    "editType": "calc",
                    "description": "The default font used for axis & tick labels on this carpet",
                    "role": "object"
                },
                "color": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "plot",
                    "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "ysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  y .",
                    "editType": "none"
                },
                "asrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  a .",
                    "editType": "none"
                },
                "bsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  b .",
                    "editType": "none"
                }
            }
        },
        "scattercarpet": {
            "meta": {
                "hrName": "scatter_carpet",
                "description": "Plots a scatter trace on either the first carpet axis or the carpet axis with a matching `carpet` attribute."
            },
            "attributes": {
                "type": "scattercarpet",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "carpet": {
                    "valType": "string",
                    "role": "info",
                    "editType": "calc",
                    "description": "An identifier for this carpet, so that `scattercarpet` and `scattercontour` traces can specify a carpet plot on which they lie"
                },
                "a": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary<i>.sum`.",
                    "role": "data"
                },
                "b": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the quantity of component `a` in each data point. If `a`, `b`, and `c` are all provided, they need not be normalized, only the relative values matter. If only two arrays are provided they must be normalized to match `ternary<i>.sum`.",
                    "role": "data"
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "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"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets text elements associated with each (a,b,c) point. If a single string, the same string appears over all the data points. If an array of strings, the items are mapped in order to the the data points in (a,b,c)."
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line width (in px)."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "style",
                        "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*)."
                    },
                    "shape": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "spline"
                        ],
                        "dflt": "linear",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes."
                    },
                    "smoothing": {
                        "valType": "number",
                        "min": 0,
                        "max": 1.3,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "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)."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "fill": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "toself",
                        "tonext"
                    ],
                    "role": "style",
                    "editType": "calc",
                    "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"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "style",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "marker": {
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the marker opacity."
                    },
                    "maxdisplayed": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "editType": "calc",
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "gradient": {
                        "type": {
                            "valType": "enumerated",
                            "values": [
                                "radial",
                                "horizontal",
                                "vertical",
                                "none"
                            ],
                            "arrayOk": true,
                            "dflt": "none",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the type of gradient used to fill the markers"
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "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",
                        "role": "object",
                        "typesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  type .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "role": "object",
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the text font.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "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",
                    "arrayOk": true,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "a",
                        "b",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoveron": {
                    "valType": "flaglist",
                    "flags": [
                        "points",
                        "fills"
                    ],
                    "role": "info",
                    "editType": "style",
                    "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*."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "asrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  a .",
                    "editType": "none"
                },
                "bsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  b .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "contourcarpet": {
            "meta": {
                "hrName": "contour_carpet",
                "description": "Plots contours on either the first carpet axis or the carpet axis with a matching `carpet` attribute. Data `z` is interpreted as matching that of the corresponding carpet axis."
            },
            "attributes": {
                "type": "contourcarpet",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "carpet": {
                    "valType": "string",
                    "role": "info",
                    "editType": "calc",
                    "description": "The `carpet` of the carpet axes on which this contour trace lies"
                },
                "z": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the z data.",
                    "role": "data"
                },
                "a": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates.",
                    "impliedEdits": {
                        "xtype": "array"
                    },
                    "role": "data"
                },
                "a0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step.",
                    "impliedEdits": {
                        "xtype": "scaled"
                    }
                },
                "da": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the x coordinate step. See `x0` for more info.",
                    "impliedEdits": {
                        "xtype": "scaled"
                    }
                },
                "b": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the y coordinates.",
                    "impliedEdits": {
                        "ytype": "array"
                    },
                    "role": "data"
                },
                "b0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step.",
                    "impliedEdits": {
                        "ytype": "scaled"
                    }
                },
                "db": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the y coordinate step. See `y0` for more info.",
                    "impliedEdits": {
                        "ytype": "scaled"
                    }
                },
                "text": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the text elements associated with each z value.",
                    "role": "data"
                },
                "transpose": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Transposes the z data."
                },
                "atype": {
                    "valType": "enumerated",
                    "values": [
                        "array",
                        "scaled"
                    ],
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "If *array*, the heatmap's x coordinates are given by *x* (the default behavior when `x` is provided). If *scaled*, the heatmap's x coordinates are given by *x0* and *dx* (the default behavior when `x` is not provided)."
                },
                "btype": {
                    "valType": "enumerated",
                    "values": [
                        "array",
                        "scaled"
                    ],
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "If *array*, the heatmap's y coordinates are given by *y* (the default behavior when `y` is provided) If *scaled*, the heatmap's y coordinates are given by *y0* and *dy* (the default behavior when `y` is not provided)"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the fill color if `contours.type` is *constraint*. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "autocontour": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "style",
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the contour level attributes are picked by an algorithm. If *true*, the number of contour levels can be set in `ncontours`. If *false*, set the contour level attributes in `contours`."
                },
                "ncontours": {
                    "valType": "integer",
                    "dflt": 15,
                    "min": 1,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the maximum number of contour levels. The actual number of contours will be chosen automatically to be less than or equal to the value of `ncontours`. Has an effect only if `autocontour` is *true* or if `contours.size` is missing."
                },
                "contours": {
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "levels",
                            "constraint"
                        ],
                        "dflt": "levels",
                        "role": "info",
                        "editType": "calc",
                        "description": "If `levels`, the data is represented as a contour plot with multiple levels displayed. If `constraint`, the data is represented as constraints with the invalid region shaded as specified by the `operation` and `value` parameters."
                    },
                    "start": {
                        "valType": "number",
                        "dflt": null,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the starting contour level value. Must be less than `contours.end`"
                    },
                    "end": {
                        "valType": "number",
                        "dflt": null,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the end contour level value. Must be more than `contours.start`"
                    },
                    "size": {
                        "valType": "number",
                        "dflt": null,
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "^autocontour": false
                        },
                        "description": "Sets the step between each contour level. Must be positive."
                    },
                    "coloring": {
                        "valType": "enumerated",
                        "values": [
                            "fill",
                            "lines",
                            "none"
                        ],
                        "dflt": "fill",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines the coloring method showing the contour values. If *fill*, coloring is done evenly between each contour level If *lines*, coloring is done on the contour lines. If *none*, no coloring is applied on this trace."
                    },
                    "showlines": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the contour lines are drawn. Has an effect only if `contours.coloring` is set to *fill*."
                    },
                    "showlabels": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether to label the contour lines with their values."
                    },
                    "labelfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style"
                        },
                        "editType": "plot",
                        "description": "Sets the font used for labeling the contour levels. The default color comes from the lines, if shown. The default family and size come from `layout.font`.",
                        "role": "object"
                    },
                    "labelformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the contour label formatting rule using d3 formatting mini-language which is very similar to Python, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format."
                    },
                    "operation": {
                        "valType": "enumerated",
                        "values": [
                            "=",
                            "<",
                            ">=",
                            ">",
                            "<=",
                            "[]",
                            "()",
                            "[)",
                            "(]",
                            "][",
                            ")(",
                            "](",
                            ")["
                        ],
                        "role": "info",
                        "dflt": "=",
                        "editType": "calc",
                        "description": "Sets the constraint operation. *=* keeps regions equal to `value` *<* and *<=* keep regions less than `value` *>* and *>=* keep regions greater than `value` *[]*, *()*, *[)*, and *(]* keep regions inside `value[0]` to `value[1]` *][*, *)(*, *](*, *)[* keep regions outside `value[0]` to value[1]` Open vs. closed intervals make no difference to constraint display, but all versions are allowed for consistency with filter transforms."
                    },
                    "value": {
                        "valType": "any",
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the value or values of the constraint boundary. When `operation` is set to one of the comparison values (=,<,>=,>,<=) *value* is expected to be a number. When `operation` is set to one of the interval values ([],(),[),(],][,)(,](,)[) *value* is expected to be an array of two numbers where the first is the lower bound and the second is the upper bound."
                    },
                    "editType": "calc",
                    "impliedEdits": {
                        "autocontour": false,
                        "role": "object"
                    },
                    "role": "object"
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the color of the contour level. Has no if `contours.coloring` is set to *lines*."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line width (in px)."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "style",
                        "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*)."
                    },
                    "smoothing": {
                        "valType": "number",
                        "min": 0,
                        "max": 1.3,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the amount of smoothing for the contour lines, where *0* corresponds to no smoothing."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "zauto": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "impliedEdits": {},
                    "description": "Determines whether or not the color domain is computed with respect to the input data (here in `z`) or the bounds set in `zmin` and `zmax`  Defaults to `false` when `zmin` and `zmax` are set by the user."
                },
                "zmin": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "plot",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the lower bound of the color domain. Value should have the same units as in `z` and if set, `zmax` must be set as well."
                },
                "zmax": {
                    "valType": "number",
                    "role": "info",
                    "dflt": null,
                    "editType": "plot",
                    "impliedEdits": {
                        "zauto": false
                    },
                    "description": "Sets the upper bound of the color domain. Value should have the same units as in `z` and if set, `zmin` must be set as well."
                },
                "colorscale": {
                    "valType": "colorscale",
                    "role": "style",
                    "editType": "calc",
                    "dflt": null,
                    "impliedEdits": {
                        "autocolorscale": false
                    },
                    "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`zmin` and `zmax`. Alternatively, `colorscale` may be a palette name string of the following list: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                },
                "autocolorscale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "impliedEdits": {},
                    "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."
                },
                "reversescale": {
                    "valType": "boolean",
                    "role": "style",
                    "dflt": false,
                    "editType": "calc",
                    "description": "Reverses the color mapping if true. If true, `zmin` will correspond to the last color in the array and `zmax` will correspond to the first color."
                },
                "showscale": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "description": "Determines whether or not a colorbar is displayed for this trace."
                },
                "colorbar": {
                    "thicknessmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "style",
                        "dflt": "pixels",
                        "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.",
                        "editType": "colorbars"
                    },
                    "thickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 30,
                        "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                        "editType": "colorbars"
                    },
                    "lenmode": {
                        "valType": "enumerated",
                        "values": [
                            "fraction",
                            "pixels"
                        ],
                        "role": "info",
                        "dflt": "fraction",
                        "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.",
                        "editType": "colorbars"
                    },
                    "len": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "x": {
                        "valType": "number",
                        "dflt": 1.02,
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "description": "Sets the x position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "style",
                        "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.",
                        "editType": "colorbars"
                    },
                    "xpad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the x direction.",
                        "editType": "colorbars"
                    },
                    "y": {
                        "valType": "number",
                        "role": "style",
                        "dflt": 0.5,
                        "min": -2,
                        "max": 3,
                        "description": "Sets the y position of the color bar (in plot fraction).",
                        "editType": "colorbars"
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "middle",
                        "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.",
                        "editType": "colorbars"
                    },
                    "ypad": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 10,
                        "description": "Sets the amount of padding (in px) along the y direction.",
                        "editType": "colorbars"
                    },
                    "outlinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "outlinewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the axis line color."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 0,
                        "description": "Sets the width (in px) or the border enclosing this color bar.",
                        "editType": "colorbars"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(0,0,0,0)",
                        "description": "Sets the color of padded area.",
                        "editType": "colorbars"
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "colorbars",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "colorbars",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "colorbars",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "colorbars",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "colorbars",
                        "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": ""
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets the color bar's tick label font",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "colorbars",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "colorbars"
                                        }
                                    ],
                                    "editType": "colorbars",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "colorbars",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "colorbars",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "colorbars",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "colorbars",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "colorbars",
                        "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."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the title of the color bar.",
                        "editType": "colorbars"
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "editType": "colorbars"
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "colorbars"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "colorbars"
                        },
                        "description": "Sets this color bar's title font.",
                        "editType": "colorbars",
                        "role": "object"
                    },
                    "titleside": {
                        "valType": "enumerated",
                        "values": [
                            "right",
                            "top",
                            "bottom"
                        ],
                        "role": "style",
                        "dflt": "top",
                        "description": "Determines the location of the colorbar title with respect to the color bar.",
                        "editType": "colorbars"
                    },
                    "editType": "colorbars",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "zsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  z .",
                    "editType": "none"
                },
                "asrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  a .",
                    "editType": "none"
                },
                "bsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  b .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            }
        },
        "ohlc": {
            "meta": {
                "description": "The ohlc (short for Open-High-Low-Close) is a style of financial chart describing open, high, low and close for a given `x` coordinate (most likely time). The tip of the lines represent the `low` and `high` values and the horizontal segments represent the `open` and `close` values. Sample points where the close value is higher (lower) then the open value are called increasing (decreasing). By default, increasing items are drawn in green whereas decreasing are drawn in red."
            },
            "attributes": {
                "type": "ohlc",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates. If absent, linear coordinate will be generated.",
                    "role": "data"
                },
                "open": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the open values.",
                    "role": "data"
                },
                "high": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the high values.",
                    "role": "data"
                },
                "low": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the low values.",
                    "role": "data"
                },
                "close": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the close values.",
                    "role": "data"
                },
                "line": {
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "[object Object] Note that this style setting can also be set per direction via `increasing.line.width` and `decreasing.line.width`."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "style",
                        "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*). Note that this style setting can also be set per direction via `increasing.line.dash` and `decreasing.line.dash`."
                    },
                    "editType": "style",
                    "role": "object"
                },
                "increasing": {
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the line color.",
                            "dflt": "#3D9970"
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 2,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the line width (in px)."
                        },
                        "dash": {
                            "valType": "string",
                            "values": [
                                "solid",
                                "dot",
                                "dash",
                                "longdash",
                                "dashdot",
                                "longdashdot"
                            ],
                            "dflt": "solid",
                            "role": "style",
                            "editType": "style",
                            "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*)."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "decreasing": {
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the line color.",
                            "dflt": "#FF4136"
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 2,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the line width (in px)."
                        },
                        "dash": {
                            "valType": "string",
                            "values": [
                                "solid",
                                "dot",
                                "dash",
                                "longdash",
                                "dashdot",
                                "longdashdot"
                            ],
                            "dflt": "solid",
                            "role": "style",
                            "editType": "style",
                            "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*)."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets hover text elements associated with each sample point. 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 this trace's sample points."
                },
                "tickwidth": {
                    "valType": "number",
                    "min": 0,
                    "max": 0.5,
                    "dflt": 0.3,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the width of the open/close tick marks relative to the *x* minimal interval."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "split": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "style",
                        "description": "Show hover information (open, close, high, low) in separate labels."
                    },
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "opensrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  open .",
                    "editType": "none"
                },
                "highsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  high .",
                    "editType": "none"
                },
                "lowsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  low .",
                    "editType": "none"
                },
                "closesrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  close .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            }
        },
        "candlestick": {
            "meta": {
                "description": "The candlestick is a style of financial chart describing open, high, low and close for a given `x` coordinate (most likely time). The boxes represent the spread between the `open` and `close` values and the lines represent the spread between the `low` and `high` values Sample points where the close value is higher (lower) then the open value are called increasing (decreasing). By default, increasing candles are drawn in green whereas decreasing are drawn in red."
            },
            "attributes": {
                "type": "candlestick",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "x": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the x coordinates. If absent, linear coordinate will be generated.",
                    "role": "data"
                },
                "open": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the open values.",
                    "role": "data"
                },
                "high": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the high values.",
                    "role": "data"
                },
                "low": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the low values.",
                    "role": "data"
                },
                "close": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Sets the close values.",
                    "role": "data"
                },
                "line": {
                    "width": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 2,
                        "editType": "style",
                        "description": "Sets the width (in px) of line bounding the box(es). Note that this style setting can also be set per direction via `increasing.line.width` and `decreasing.line.width`."
                    },
                    "editType": "style",
                    "role": "object"
                },
                "increasing": {
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the color of line bounding the box(es).",
                            "dflt": "#3D9970"
                        },
                        "width": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 2,
                            "editType": "style",
                            "description": "Sets the width (in px) of line bounding the box(es)."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "fillcolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "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",
                    "role": "object"
                },
                "decreasing": {
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the color of line bounding the box(es).",
                            "dflt": "#FF4136"
                        },
                        "width": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 2,
                            "editType": "style",
                            "description": "Sets the width (in px) of line bounding the box(es)."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "fillcolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "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",
                    "role": "object"
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets hover text elements associated with each sample point. 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 this trace's sample points."
                },
                "whiskerwidth": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the width of the whiskers relative to the box' width. For example, with 1, the whiskers are as wide as the box(es)."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "split": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "style",
                        "description": "Show hover information (open, close, high, low) in separate labels."
                    },
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "xcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use with `x` date data."
                },
                "xaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "x",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "yaxis": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "y",
                    "editType": "calc+clearAxisTypes",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "xsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  x .",
                    "editType": "none"
                },
                "opensrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  open .",
                    "editType": "none"
                },
                "highsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  high .",
                    "editType": "none"
                },
                "lowsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  low .",
                    "editType": "none"
                },
                "closesrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  close .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                }
            },
            "layoutAttributes": {
                "boxmode": {
                    "valType": "enumerated",
                    "values": [
                        "group",
                        "overlay"
                    ],
                    "dflt": "overlay",
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines how boxes at the same location coordinate are displayed on the graph. If *group*, the boxes are plotted next to one another centered around the shared location. If *overlay*, the boxes are plotted over one another, you might need to set *opacity* to see them multiple boxes."
                },
                "boxgap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0.3,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between boxes of adjacent location coordinates."
                },
                "boxgroupgap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0.3,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap (in plot fraction) between boxes of the same location coordinate."
                }
            }
        },
        "scatterpolar": {
            "meta": {
                "hrName": "scatter_polar",
                "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."
            },
            "attributes": {
                "type": "scatterpolar",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "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*."
                },
                "r": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the radial coordinates",
                    "role": "data"
                },
                "theta": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the angular coordinates",
                    "role": "data"
                },
                "r0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step."
                },
                "dr": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the r coordinate step."
                },
                "theta0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step."
                },
                "dtheta": {
                    "valType": "number",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates."
                },
                "thetaunit": {
                    "valType": "enumerated",
                    "values": [
                        "radians",
                        "degrees",
                        "gradians"
                    ],
                    "dflt": "degrees",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes."
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "style",
                    "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."
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the line width (in px)."
                    },
                    "dash": {
                        "valType": "string",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "editType": "style",
                        "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*)."
                    },
                    "shape": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "spline"
                        ],
                        "dflt": "linear",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines the line shape. With *spline* the lines are drawn using spline interpolation. The other available values correspond to step-wise line shapes."
                    },
                    "smoothing": {
                        "valType": "number",
                        "min": 0,
                        "max": 1.3,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "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)."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "marker": {
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the marker opacity."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "maxdisplayed": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a maximum number of points to be drawn on the graph. *0* corresponds to no limit."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "editType": "calc",
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "gradient": {
                        "type": {
                            "valType": "enumerated",
                            "values": [
                                "radial",
                                "horizontal",
                                "vertical",
                                "none"
                            ],
                            "arrayOk": true,
                            "dflt": "none",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the type of gradient used to fill the markers"
                        },
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "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",
                        "role": "object",
                        "typesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  type .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "role": "object",
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "cliponaxis": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "plot",
                    "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*."
                },
                "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",
                    "arrayOk": true,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "style",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the text font.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "fill": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "toself",
                        "tonext"
                    ],
                    "role": "style",
                    "editType": "calc",
                    "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"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "style",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "r",
                        "theta",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoveron": {
                    "valType": "flaglist",
                    "flags": [
                        "points",
                        "fills"
                    ],
                    "role": "info",
                    "editType": "style",
                    "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*."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "subplot": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "polar",
                    "editType": "calc",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "rsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  r .",
                    "editType": "none"
                },
                "thetasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  theta .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "scatterpolargl": {
            "meta": {
                "hrName": "scatter_polar_gl",
                "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."
            },
            "attributes": {
                "type": "scatterpolargl",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "mode": {
                    "valType": "flaglist",
                    "flags": [
                        "lines",
                        "markers",
                        "text"
                    ],
                    "extras": [
                        "none"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "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*."
                },
                "r": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the radial coordinates",
                    "role": "data"
                },
                "theta": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the angular coordinates",
                    "role": "data"
                },
                "r0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step."
                },
                "dr": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the r coordinate step."
                },
                "theta0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step."
                },
                "dtheta": {
                    "valType": "number",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates."
                },
                "thetaunit": {
                    "valType": "enumerated",
                    "values": [
                        "radians",
                        "degrees",
                        "gradians"
                    ],
                    "dflt": "degrees",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes."
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "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."
                },
                "hovertext": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "style",
                    "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."
                },
                "line": {
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line color."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 2,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the line width (in px)."
                    },
                    "shape": {
                        "valType": "enumerated",
                        "values": [
                            "linear",
                            "hv",
                            "vh",
                            "hvh",
                            "vhv"
                        ],
                        "dflt": "linear",
                        "role": "style",
                        "editType": "calc",
                        "description": "Determines the line shape. The values correspond to step-wise line shapes."
                    },
                    "dash": {
                        "valType": "enumerated",
                        "values": [
                            "solid",
                            "dot",
                            "dash",
                            "longdash",
                            "dashdot",
                            "longdashdot"
                        ],
                        "dflt": "solid",
                        "role": "style",
                        "description": "Sets the style of the lines.",
                        "editType": "calc"
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "connectgaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected."
                },
                "marker": {
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker size (in px)."
                    },
                    "sizeref": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "calc",
                        "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`."
                    },
                    "sizemin": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "calc",
                        "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."
                    },
                    "sizemode": {
                        "valType": "enumerated",
                        "values": [
                            "diameter",
                            "area"
                        ],
                        "dflt": "diameter",
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Sets the marker opacity."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "calc"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "calc"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "calc"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "calc"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "calc"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "calc"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "calc"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "calc"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "calc"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "calc"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "calc",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "calc",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "calc",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "calc",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "calc",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "calc"
                                            }
                                        ],
                                        "editType": "calc",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "calc",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "calc",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "calc",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "calc",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "calc",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "calc",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "calc"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "calc"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "calc",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "calc"
                        },
                        "editType": "calc",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "description": "Sets the width (in px) of the lines bounding the marker points."
                        },
                        "editType": "calc",
                        "role": "object",
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        },
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    }
                },
                "fill": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "tozeroy",
                        "tozerox",
                        "tonexty",
                        "tonextx",
                        "toself",
                        "tonext"
                    ],
                    "role": "style",
                    "editType": "calc",
                    "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"
                },
                "fillcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                },
                "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",
                    "arrayOk": true,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                },
                "textfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "calc",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "arrayOk": true
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "calc",
                        "arrayOk": true
                    },
                    "editType": "calc",
                    "description": "Sets the text font.",
                    "role": "object",
                    "familysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  family .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    }
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "r",
                        "theta",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker size of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "subplot": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "polar",
                    "editType": "calc",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "rsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  r .",
                    "editType": "none"
                },
                "thetasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  theta .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hovertextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hovertext .",
                    "editType": "none"
                },
                "textpositionsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  textposition .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            }
        },
        "barpolar": {
            "meta": {
                "hrName": "bar_polar",
                "description": "The data visualized by the radial span of the bars is set in `r`"
            },
            "attributes": {
                "type": "barpolar",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "r": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the radial coordinates",
                    "role": "data"
                },
                "theta": {
                    "valType": "data_array",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the angular coordinates",
                    "role": "data"
                },
                "r0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `r`. Builds a linear space of r coordinates. Use with `dr` where `r0` is the starting coordinate and `dr` the step."
                },
                "dr": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the r coordinate step."
                },
                "theta0": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Alternate to `theta`. Builds a linear space of theta coordinates. Use with `dtheta` where `theta0` is the starting coordinate and `dtheta` the step."
                },
                "dtheta": {
                    "valType": "number",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the theta coordinate step. By default, the `dtheta` step equals the subplot's period divided by the length of the `r` coordinates."
                },
                "thetaunit": {
                    "valType": "enumerated",
                    "values": [
                        "radians",
                        "degrees",
                        "gradians"
                    ],
                    "dflt": "degrees",
                    "role": "info",
                    "editType": "calc+clearAxisTypes",
                    "description": "Sets the unit of input *theta* values. Has an effect only when on *linear* angular axes."
                },
                "base": {
                    "valType": "any",
                    "dflt": null,
                    "arrayOk": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets where the bar base is drawn (in radial axis units). In *stack* barmode, traces that set *base* will be excluded and drawn in *overlay* mode instead."
                },
                "offset": {
                    "valType": "number",
                    "dflt": null,
                    "arrayOk": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Shifts the angular position where the bar is drawn (in *thetatunit* units)."
                },
                "width": {
                    "valType": "number",
                    "dflt": null,
                    "min": 0,
                    "arrayOk": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the bar angular width (in *thetaunit* units)."
                },
                "text": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "arrayOk": true,
                    "editType": "calc",
                    "description": "Sets hover text elements associated with each bar. If a single string, the same string appears over all bars. If an array of string, the items are mapped in order to the this trace's coordinates."
                },
                "marker": {
                    "line": {
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the width (in px) of the lines bounding the marker points.",
                            "dflt": 0
                        },
                        "editType": "calc",
                        "color": {
                            "valType": "color",
                            "arrayOk": true,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets themarker.linecolor. 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."
                        },
                        "cauto": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "cmin": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "cmax": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "plot",
                            "impliedEdits": {
                                "cauto": false
                            },
                            "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."
                        },
                        "colorscale": {
                            "valType": "colorscale",
                            "role": "style",
                            "editType": "calc",
                            "dflt": null,
                            "impliedEdits": {
                                "autocolorscale": false
                            },
                            "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                        },
                        "autocolorscale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": true,
                            "editType": "calc",
                            "impliedEdits": {},
                            "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."
                        },
                        "reversescale": {
                            "valType": "boolean",
                            "role": "style",
                            "dflt": false,
                            "editType": "calc",
                            "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."
                        },
                        "role": "object",
                        "widthsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  width .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "editType": "calc",
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets themarkercolor. 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."
                    },
                    "cauto": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "cmin": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "cmax": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "plot",
                        "impliedEdits": {
                            "cauto": false
                        },
                        "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."
                    },
                    "colorscale": {
                        "valType": "colorscale",
                        "role": "style",
                        "editType": "calc",
                        "dflt": null,
                        "impliedEdits": {
                            "autocolorscale": false
                        },
                        "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: Greys,YlGnBu,Greens,YlOrRd,Bluered,RdBu,Reds,Blues,Picnic,Rainbow,Portland,Jet,Hot,Blackbody,Earth,Electric,Viridis,Cividis."
                    },
                    "autocolorscale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": true,
                        "editType": "calc",
                        "impliedEdits": {},
                        "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."
                    },
                    "reversescale": {
                        "valType": "boolean",
                        "role": "style",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "showscale": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "editType": "calc",
                        "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."
                    },
                    "colorbar": {
                        "thicknessmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "style",
                            "dflt": "pixels",
                            "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.",
                            "editType": "colorbars"
                        },
                        "thickness": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 30,
                            "description": "Sets the thickness of the color bar This measure excludes the size of the padding, ticks and labels.",
                            "editType": "colorbars"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "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.",
                            "editType": "colorbars"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "x": {
                            "valType": "number",
                            "dflt": 1.02,
                            "min": -2,
                            "max": 3,
                            "role": "style",
                            "description": "Sets the x position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "style",
                            "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.",
                            "editType": "colorbars"
                        },
                        "xpad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the x direction.",
                            "editType": "colorbars"
                        },
                        "y": {
                            "valType": "number",
                            "role": "style",
                            "dflt": 0.5,
                            "min": -2,
                            "max": 3,
                            "description": "Sets the y position of the color bar (in plot fraction).",
                            "editType": "colorbars"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "middle",
                            "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.",
                            "editType": "colorbars"
                        },
                        "ypad": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 10,
                            "description": "Sets the amount of padding (in px) along the y direction.",
                            "editType": "colorbars"
                        },
                        "outlinecolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "outlinewidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the width (in px) of the axis line."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the axis line color."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "role": "style",
                            "min": 0,
                            "dflt": 0,
                            "description": "Sets the width (in px) or the border enclosing this color bar.",
                            "editType": "colorbars"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "rgba(0,0,0,0)",
                            "description": "Sets the color of padded area.",
                            "editType": "colorbars"
                        },
                        "tickmode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "linear",
                                "array"
                            ],
                            "role": "info",
                            "editType": "colorbars",
                            "impliedEdits": {},
                            "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)."
                        },
                        "nticks": {
                            "valType": "integer",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "colorbars",
                            "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*."
                        },
                        "tick0": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>* (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."
                        },
                        "dtick": {
                            "valType": "any",
                            "role": "style",
                            "editType": "colorbars",
                            "impliedEdits": {
                                "tickmode": "linear"
                            },
                            "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<f>*, 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<n>* 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*"
                        },
                        "tickvals": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                            "role": "data"
                        },
                        "ticktext": {
                            "valType": "data_array",
                            "editType": "colorbars",
                            "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                            "role": "data"
                        },
                        "ticks": {
                            "valType": "enumerated",
                            "values": [
                                "outside",
                                "inside",
                                ""
                            ],
                            "role": "style",
                            "editType": "colorbars",
                            "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": ""
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 5,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick length (in px)."
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick width (in px)."
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#444",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the tick color."
                        },
                        "showticklabels": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Determines whether or not the tick labels are drawn."
                        },
                        "tickfont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets the color bar's tick label font",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "tickangle": {
                            "valType": "angle",
                            "dflt": "auto",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                        },
                        "tickformat": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                        },
                        "tickformatstops": {
                            "items": {
                                "tickformatstop": {
                                    "enabled": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "editType": "colorbars",
                                        "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                    },
                                    "dtickrange": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "colorbars"
                                            }
                                        ],
                                        "editType": "colorbars",
                                        "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*"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "dflt": "",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                    },
                                    "editType": "colorbars",
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "colorbars",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "colorbars",
                                        "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`."
                                    },
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "tickprefix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label prefix."
                        },
                        "showtickprefix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "ticksuffix": {
                            "valType": "string",
                            "dflt": "",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Sets a tick label suffix."
                        },
                        "showticksuffix": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "description": "Same as `showtickprefix` but for tick suffixes."
                        },
                        "separatethousands": {
                            "valType": "boolean",
                            "dflt": false,
                            "role": "style",
                            "editType": "colorbars",
                            "description": "If \"true\", even 4-digit integers are separated"
                        },
                        "exponentformat": {
                            "valType": "enumerated",
                            "values": [
                                "none",
                                "e",
                                "E",
                                "power",
                                "SI",
                                "B"
                            ],
                            "dflt": "B",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "showexponent": {
                            "valType": "enumerated",
                            "values": [
                                "all",
                                "first",
                                "last",
                                "none"
                            ],
                            "dflt": "all",
                            "role": "style",
                            "editType": "colorbars",
                            "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."
                        },
                        "title": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the title of the color bar.",
                            "editType": "colorbars"
                        },
                        "titlefont": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "colorbars"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "colorbars"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "colorbars"
                            },
                            "description": "Sets this color bar's title font.",
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "titleside": {
                            "valType": "enumerated",
                            "values": [
                                "right",
                                "top",
                                "bottom"
                            ],
                            "role": "style",
                            "dflt": "top",
                            "description": "Determines the location of the colorbar title with respect to the color bar.",
                            "editType": "colorbars"
                        },
                        "editType": "colorbars",
                        "role": "object",
                        "tickvalssrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  tickvals .",
                            "editType": "none"
                        },
                        "ticktextsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  ticktext .",
                            "editType": "none"
                        }
                    },
                    "opacity": {
                        "valType": "number",
                        "arrayOk": true,
                        "dflt": 1,
                        "min": 0,
                        "max": 1,
                        "role": "style",
                        "editType": "style",
                        "description": "Sets the opacity of the bars."
                    },
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    }
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "r",
                        "theta",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "selected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of selected points."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of selected points."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "unselected": {
                    "marker": {
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker opacity of unselected points, applied only when a selection exists."
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the marker color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "textfont": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "description": "Sets the text font color of unselected points, applied only when a selection exists."
                        },
                        "editType": "style",
                        "role": "object"
                    },
                    "editType": "style",
                    "role": "object"
                },
                "subplot": {
                    "valType": "subplotid",
                    "role": "info",
                    "dflt": "polar",
                    "editType": "calc",
                    "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."
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "rsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  r .",
                    "editType": "none"
                },
                "thetasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  theta .",
                    "editType": "none"
                },
                "basesrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  base .",
                    "editType": "none"
                },
                "offsetsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  offset .",
                    "editType": "none"
                },
                "widthsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  width .",
                    "editType": "none"
                },
                "textsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  text .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                }
            },
            "layoutAttributes": {
                "barmode": {
                    "valType": "enumerated",
                    "values": [
                        "stack",
                        "overlay"
                    ],
                    "dflt": "stack",
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines how bars at the same location coordinate are displayed on the graph. With *stack*, the bars are stacked on top of one another With *overlay*, the bars are plotted over one another, you might need to an *opacity* to see multiple bars."
                },
                "bargap": {
                    "valType": "number",
                    "dflt": 0.1,
                    "min": 0,
                    "max": 1,
                    "role": "style",
                    "editType": "calc",
                    "description": "Sets the gap between bars of adjacent location coordinates. Values are unitless, they represent fractions of the minimum difference in bar positions in the data."
                }
            }
        },
        "area": {
            "meta": {},
            "attributes": {
                "type": "area",
                "visible": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "legendonly"
                    ],
                    "role": "info",
                    "dflt": true,
                    "editType": "calc",
                    "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)."
                },
                "showlegend": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "style",
                    "description": "Determines whether or not an item corresponding to this trace is shown in the legend."
                },
                "legendgroup": {
                    "valType": "string",
                    "role": "info",
                    "dflt": "",
                    "editType": "style",
                    "description": "Sets the legend group for this trace. Traces part of the same legend group hide/show at the same time when toggling legend items."
                },
                "opacity": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "max": 1,
                    "dflt": 1,
                    "editType": "style",
                    "description": "Sets the opacity of the trace."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "editType": "style",
                    "description": "Sets the trace name. The trace name appear as the legend item and on hover."
                },
                "uid": {
                    "valType": "string",
                    "role": "info",
                    "editType": "plot"
                },
                "ids": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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.",
                    "role": "data"
                },
                "customdata": {
                    "valType": "data_array",
                    "editType": "calc",
                    "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",
                    "role": "data"
                },
                "selectedpoints": {
                    "valType": "any",
                    "role": "info",
                    "editType": "calc",
                    "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."
                },
                "hoverinfo": {
                    "valType": "flaglist",
                    "role": "info",
                    "flags": [
                        "x",
                        "y",
                        "z",
                        "text",
                        "name"
                    ],
                    "extras": [
                        "all",
                        "none",
                        "skip"
                    ],
                    "arrayOk": true,
                    "dflt": "all",
                    "editType": "none",
                    "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."
                },
                "hoverlabel": {
                    "bgcolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the background color of the hover labels for this trace"
                    },
                    "bordercolor": {
                        "valType": "color",
                        "role": "style",
                        "arrayOk": true,
                        "editType": "none",
                        "description": "Sets the border color of the hover labels for this trace."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "none",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                            "arrayOk": true
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "none",
                            "arrayOk": true
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "description": "Sets the font used in hover labels.",
                        "role": "object",
                        "familysrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  family .",
                            "editType": "none"
                        },
                        "sizesrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  size .",
                            "editType": "none"
                        },
                        "colorsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  color .",
                            "editType": "none"
                        }
                    },
                    "namelength": {
                        "valType": "integer",
                        "min": -1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the length (in number of characters) of the trace name in the hover labels for this trace. -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."
                    },
                    "editType": "calc",
                    "role": "object",
                    "bgcolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bgcolor .",
                        "editType": "none"
                    },
                    "bordercolorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  bordercolor .",
                        "editType": "none"
                    },
                    "namelengthsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  namelength .",
                        "editType": "none"
                    }
                },
                "stream": {
                    "token": {
                        "valType": "string",
                        "noBlank": true,
                        "strict": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "The stream id number links a data trace on a plot with a stream. See https://plot.ly/settings for more details."
                    },
                    "maxpoints": {
                        "valType": "number",
                        "min": 0,
                        "max": 10000,
                        "dflt": 500,
                        "role": "info",
                        "editType": "calc",
                        "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."
                    },
                    "editType": "calc",
                    "role": "object"
                },
                "transforms": {
                    "items": {
                        "transform": {
                            "editType": "calc",
                            "description": "An array of operations that manipulate the trace data, for example filtering or sorting the data arrays.",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "r": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Area traces are deprecated! Please switch to the *barpolar* trace type. Sets the radial coordinates for legacy polar chart only.",
                    "role": "data"
                },
                "t": {
                    "valType": "data_array",
                    "editType": "calc",
                    "description": "Area traces are deprecated! Please switch to the *barpolar* trace type. Sets the angular coordinates for legacy polar chart only.",
                    "role": "data"
                },
                "marker": {
                    "color": {
                        "valType": "color",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Area traces are deprecated! Please switch to the *barpolar* trace type. Sets themarkercolor. 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."
                    },
                    "size": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 6,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "calc",
                        "description": "Area traces are deprecated! Please switch to the *barpolar* trace type. Sets the marker size (in px)."
                    },
                    "symbol": {
                        "valType": "enumerated",
                        "values": [
                            0,
                            "circle",
                            100,
                            "circle-open",
                            200,
                            "circle-dot",
                            300,
                            "circle-open-dot",
                            1,
                            "square",
                            101,
                            "square-open",
                            201,
                            "square-dot",
                            301,
                            "square-open-dot",
                            2,
                            "diamond",
                            102,
                            "diamond-open",
                            202,
                            "diamond-dot",
                            302,
                            "diamond-open-dot",
                            3,
                            "cross",
                            103,
                            "cross-open",
                            203,
                            "cross-dot",
                            303,
                            "cross-open-dot",
                            4,
                            "x",
                            104,
                            "x-open",
                            204,
                            "x-dot",
                            304,
                            "x-open-dot",
                            5,
                            "triangle-up",
                            105,
                            "triangle-up-open",
                            205,
                            "triangle-up-dot",
                            305,
                            "triangle-up-open-dot",
                            6,
                            "triangle-down",
                            106,
                            "triangle-down-open",
                            206,
                            "triangle-down-dot",
                            306,
                            "triangle-down-open-dot",
                            7,
                            "triangle-left",
                            107,
                            "triangle-left-open",
                            207,
                            "triangle-left-dot",
                            307,
                            "triangle-left-open-dot",
                            8,
                            "triangle-right",
                            108,
                            "triangle-right-open",
                            208,
                            "triangle-right-dot",
                            308,
                            "triangle-right-open-dot",
                            9,
                            "triangle-ne",
                            109,
                            "triangle-ne-open",
                            209,
                            "triangle-ne-dot",
                            309,
                            "triangle-ne-open-dot",
                            10,
                            "triangle-se",
                            110,
                            "triangle-se-open",
                            210,
                            "triangle-se-dot",
                            310,
                            "triangle-se-open-dot",
                            11,
                            "triangle-sw",
                            111,
                            "triangle-sw-open",
                            211,
                            "triangle-sw-dot",
                            311,
                            "triangle-sw-open-dot",
                            12,
                            "triangle-nw",
                            112,
                            "triangle-nw-open",
                            212,
                            "triangle-nw-dot",
                            312,
                            "triangle-nw-open-dot",
                            13,
                            "pentagon",
                            113,
                            "pentagon-open",
                            213,
                            "pentagon-dot",
                            313,
                            "pentagon-open-dot",
                            14,
                            "hexagon",
                            114,
                            "hexagon-open",
                            214,
                            "hexagon-dot",
                            314,
                            "hexagon-open-dot",
                            15,
                            "hexagon2",
                            115,
                            "hexagon2-open",
                            215,
                            "hexagon2-dot",
                            315,
                            "hexagon2-open-dot",
                            16,
                            "octagon",
                            116,
                            "octagon-open",
                            216,
                            "octagon-dot",
                            316,
                            "octagon-open-dot",
                            17,
                            "star",
                            117,
                            "star-open",
                            217,
                            "star-dot",
                            317,
                            "star-open-dot",
                            18,
                            "hexagram",
                            118,
                            "hexagram-open",
                            218,
                            "hexagram-dot",
                            318,
                            "hexagram-open-dot",
                            19,
                            "star-triangle-up",
                            119,
                            "star-triangle-up-open",
                            219,
                            "star-triangle-up-dot",
                            319,
                            "star-triangle-up-open-dot",
                            20,
                            "star-triangle-down",
                            120,
                            "star-triangle-down-open",
                            220,
                            "star-triangle-down-dot",
                            320,
                            "star-triangle-down-open-dot",
                            21,
                            "star-square",
                            121,
                            "star-square-open",
                            221,
                            "star-square-dot",
                            321,
                            "star-square-open-dot",
                            22,
                            "star-diamond",
                            122,
                            "star-diamond-open",
                            222,
                            "star-diamond-dot",
                            322,
                            "star-diamond-open-dot",
                            23,
                            "diamond-tall",
                            123,
                            "diamond-tall-open",
                            223,
                            "diamond-tall-dot",
                            323,
                            "diamond-tall-open-dot",
                            24,
                            "diamond-wide",
                            124,
                            "diamond-wide-open",
                            224,
                            "diamond-wide-dot",
                            324,
                            "diamond-wide-open-dot",
                            25,
                            "hourglass",
                            125,
                            "hourglass-open",
                            26,
                            "bowtie",
                            126,
                            "bowtie-open",
                            27,
                            "circle-cross",
                            127,
                            "circle-cross-open",
                            28,
                            "circle-x",
                            128,
                            "circle-x-open",
                            29,
                            "square-cross",
                            129,
                            "square-cross-open",
                            30,
                            "square-x",
                            130,
                            "square-x-open",
                            31,
                            "diamond-cross",
                            131,
                            "diamond-cross-open",
                            32,
                            "diamond-x",
                            132,
                            "diamond-x-open",
                            33,
                            "cross-thin",
                            133,
                            "cross-thin-open",
                            34,
                            "x-thin",
                            134,
                            "x-thin-open",
                            35,
                            "asterisk",
                            135,
                            "asterisk-open",
                            36,
                            "hash",
                            136,
                            "hash-open",
                            236,
                            "hash-dot",
                            336,
                            "hash-open-dot",
                            37,
                            "y-up",
                            137,
                            "y-up-open",
                            38,
                            "y-down",
                            138,
                            "y-down-open",
                            39,
                            "y-left",
                            139,
                            "y-left-open",
                            40,
                            "y-right",
                            140,
                            "y-right-open",
                            41,
                            "line-ew",
                            141,
                            "line-ew-open",
                            42,
                            "line-ns",
                            142,
                            "line-ns-open",
                            43,
                            "line-ne",
                            143,
                            "line-ne-open",
                            44,
                            "line-nw",
                            144,
                            "line-nw-open"
                        ],
                        "dflt": "circle",
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Area traces are deprecated! Please switch to the *barpolar* trace type. 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."
                    },
                    "opacity": {
                        "valType": "number",
                        "min": 0,
                        "max": 1,
                        "arrayOk": true,
                        "role": "style",
                        "editType": "style",
                        "description": "Area traces are deprecated! Please switch to the *barpolar* trace type. Sets the marker opacity."
                    },
                    "editType": "calc",
                    "role": "object",
                    "colorsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  color .",
                        "editType": "none"
                    },
                    "sizesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  size .",
                        "editType": "none"
                    },
                    "symbolsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  symbol .",
                        "editType": "none"
                    },
                    "opacitysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  opacity .",
                        "editType": "none"
                    }
                },
                "idssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ids .",
                    "editType": "none"
                },
                "customdatasrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  customdata .",
                    "editType": "none"
                },
                "hoverinfosrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  hoverinfo .",
                    "editType": "none"
                },
                "rsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  r .",
                    "editType": "none"
                },
                "tsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  t .",
                    "editType": "none"
                }
            }
        }
    },
    "layout": {
        "layoutAttributes": {
            "font": {
                "family": {
                    "valType": "string",
                    "role": "style",
                    "noBlank": true,
                    "strict": true,
                    "editType": "calc",
                    "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                    "dflt": "\"Open Sans\", verdana, arial, sans-serif"
                },
                "size": {
                    "valType": "number",
                    "role": "style",
                    "min": 1,
                    "editType": "calc",
                    "dflt": 12
                },
                "color": {
                    "valType": "color",
                    "role": "style",
                    "editType": "calc",
                    "dflt": "#444"
                },
                "editType": "calc",
                "description": "Sets the global font. Note that fonts used in traces and other layout components inherit from the global font.",
                "role": "object"
            },
            "title": {
                "valType": "string",
                "role": "info",
                "editType": "layoutstyle",
                "description": "Sets the plot's title."
            },
            "titlefont": {
                "family": {
                    "valType": "string",
                    "role": "style",
                    "noBlank": true,
                    "strict": true,
                    "editType": "layoutstyle",
                    "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                },
                "size": {
                    "valType": "number",
                    "role": "style",
                    "min": 1,
                    "editType": "layoutstyle"
                },
                "color": {
                    "valType": "color",
                    "role": "style",
                    "editType": "layoutstyle"
                },
                "editType": "layoutstyle",
                "description": "Sets the title font.",
                "role": "object"
            },
            "autosize": {
                "valType": "boolean",
                "role": "info",
                "dflt": false,
                "editType": "none",
                "description": "Determines whether or not a layout width or height that has been left undefined by the user is initialized on each relayout. Note that, regardless of this attribute, an undefined layout width or height is always initialized on the first call to plot."
            },
            "width": {
                "valType": "number",
                "role": "info",
                "min": 10,
                "dflt": 700,
                "editType": "plot",
                "description": "Sets the plot's width (in px)."
            },
            "height": {
                "valType": "number",
                "role": "info",
                "min": 10,
                "dflt": 450,
                "editType": "plot",
                "description": "Sets the plot's height (in px)."
            },
            "margin": {
                "l": {
                    "valType": "number",
                    "role": "info",
                    "min": 0,
                    "dflt": 80,
                    "editType": "plot",
                    "description": "Sets the left margin (in px)."
                },
                "r": {
                    "valType": "number",
                    "role": "info",
                    "min": 0,
                    "dflt": 80,
                    "editType": "plot",
                    "description": "Sets the right margin (in px)."
                },
                "t": {
                    "valType": "number",
                    "role": "info",
                    "min": 0,
                    "dflt": 100,
                    "editType": "plot",
                    "description": "Sets the top margin (in px)."
                },
                "b": {
                    "valType": "number",
                    "role": "info",
                    "min": 0,
                    "dflt": 80,
                    "editType": "plot",
                    "description": "Sets the bottom margin (in px)."
                },
                "pad": {
                    "valType": "number",
                    "role": "info",
                    "min": 0,
                    "dflt": 0,
                    "editType": "plot",
                    "description": "Sets the amount of padding (in px) between the plotting area and the axis lines"
                },
                "autoexpand": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": true,
                    "editType": "plot"
                },
                "editType": "plot",
                "role": "object"
            },
            "paper_bgcolor": {
                "valType": "color",
                "role": "style",
                "dflt": "#fff",
                "editType": "plot",
                "description": "Sets the color of paper where the graph is drawn."
            },
            "plot_bgcolor": {
                "valType": "color",
                "role": "style",
                "dflt": "#fff",
                "editType": "layoutstyle",
                "description": "Sets the color of plotting area in-between x and y axes."
            },
            "separators": {
                "valType": "string",
                "role": "style",
                "editType": "plot",
                "description": "Sets the decimal and thousand separators. For example, *. * puts a '.' before decimals and a space between thousands. In English locales, dflt is *.,* but other locales may alter this default."
            },
            "hidesources": {
                "valType": "boolean",
                "role": "info",
                "dflt": false,
                "editType": "plot",
                "description": "Determines whether or not a text link citing the data source is placed at the bottom-right cored of the figure. Has only an effect only on graphs that have been generated via forked graphs from the plotly service (at https://plot.ly or on-premise)."
            },
            "showlegend": {
                "valType": "boolean",
                "role": "info",
                "editType": "legend",
                "description": "Determines whether or not a legend is drawn. Default is `true` if there is a trace to show and any of these: a) Two or more traces would by default be shown in the legend. b) One pie trace is shown in the legend. c) One trace is explicitly given with `showlegend: true`."
            },
            "colorway": {
                "valType": "colorlist",
                "dflt": [
                    "#1f77b4",
                    "#ff7f0e",
                    "#2ca02c",
                    "#d62728",
                    "#9467bd",
                    "#8c564b",
                    "#e377c2",
                    "#7f7f7f",
                    "#bcbd22",
                    "#17becf"
                ],
                "role": "style",
                "editType": "calc",
                "description": "Sets the default trace colors."
            },
            "datarevision": {
                "valType": "any",
                "role": "info",
                "editType": "calc",
                "description": "If provided, a changed value tells `Plotly.react` that one or more data arrays has changed. This way you can modify arrays in-place rather than making a complete new copy for an incremental change. If NOT provided, `Plotly.react` assumes that data arrays are being treated as immutable, thus any data array with a different identity from its predecessor contains new data."
            },
            "template": {
                "valType": "any",
                "role": "info",
                "editType": "calc",
                "description": "Default attributes to be applied to the plot. Templates can be created from existing plots using `Plotly.makeTemplate`, or created manually. They should be objects with format: `{layout: layoutTemplate, data: {[type]: [traceTemplate, ...]}, ...}` `layoutTemplate` and `traceTemplate` are objects matching the attribute structure of `layout` and a data trace.  Trace templates are applied cyclically to traces of each type. Container arrays (eg `annotations`) have special handling: An object ending in `defaults` (eg `annotationdefaults`) is applied to each array item. But if an item has a `templateitemname` key we look in the template array for an item with matching `name` and apply that instead. If no matching `name` is found we mark the item invisible. Any named template item not referenced is appended to the end of the array, so you can use this for a watermark annotation or a logo image, for example. To omit one of these items on the plot, make an item with matching `templateitemname` and `visible: false`."
            },
            "modebar": {
                "orientation": {
                    "valType": "enumerated",
                    "values": [
                        "v",
                        "h"
                    ],
                    "dflt": "h",
                    "role": "info",
                    "editType": "modebar",
                    "description": "Sets the orientation of the modebar."
                },
                "bgcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "modebar",
                    "description": "Sets the background color of the modebar."
                },
                "color": {
                    "valType": "color",
                    "role": "style",
                    "editType": "modebar",
                    "description": "Sets the color of the icons in the modebar."
                },
                "activecolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "modebar",
                    "description": "Sets the color of the active or hovered on icons in the modebar."
                },
                "editType": "modebar",
                "role": "object"
            },
            "clickmode": {
                "valType": "flaglist",
                "role": "info",
                "flags": [
                    "event",
                    "select"
                ],
                "dflt": "event",
                "editType": "plot",
                "extras": [
                    "none"
                ],
                "description": "Determines the mode of single click interactions. *event* is the default value and emits the `plotly_click` event. In addition this mode emits the `plotly_selected` event in drag modes *lasso* and *select*, but with no event data attached (kept for compatibility reasons). The *select* flag enables selecting single data points via click. This mode also supports persistent selections, meaning that pressing Shift while clicking, adds to / subtracts from an existing selection. *select* with `hovermode`: *x* can be confusing, consider explicitly setting `hovermode`: *closest* when using this feature. Selection events are sent accordingly as long as *event* flag is set as well. When the *event* flag is missing, `plotly_click` and `plotly_selected` events are not fired."
            },
            "dragmode": {
                "valType": "enumerated",
                "role": "info",
                "values": [
                    "zoom",
                    "pan",
                    "select",
                    "lasso",
                    "orbit",
                    "turntable"
                ],
                "dflt": "zoom",
                "editType": "modebar",
                "description": "Determines the mode of drag interactions. *select* and *lasso* apply only to scatter traces with markers or text. *orbit* and *turntable* apply only to 3D scenes."
            },
            "hovermode": {
                "valType": "enumerated",
                "role": "info",
                "values": [
                    "x",
                    "y",
                    "closest",
                    false
                ],
                "editType": "modebar",
                "description": "Determines the mode of hover interactions. If `clickmode` includes the *select* flag, `hovermode` defaults to *closest*. If `clickmode` lacks the *select* flag, it defaults to *x* or *y* (depending on the trace's `orientation` value) for plots based on cartesian coordinates. For anything else the default value is *closest*."
            },
            "hoverdistance": {
                "valType": "integer",
                "min": -1,
                "dflt": 20,
                "role": "info",
                "editType": "none",
                "description": "Sets the default distance (in pixels) to look for data to add hover labels (-1 means no cutoff, 0 means no looking for data). This is only a real distance for hovering on point-like objects, like scatter points. For area-like objects (bars, scatter fills, etc) hovering is on inside the area and off outside, but these objects will not supersede hover on point-like objects in case of conflict."
            },
            "spikedistance": {
                "valType": "integer",
                "min": -1,
                "dflt": 20,
                "role": "info",
                "editType": "none",
                "description": "Sets the default distance (in pixels) to look for data to draw spikelines to (-1 means no cutoff, 0 means no looking for data). As with hoverdistance, distance does not apply to area-like objects. In addition, some objects can be hovered on but will not generate spikelines, such as scatter fills."
            },
            "hoverlabel": {
                "bgcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the background color of all hover labels on graph"
                },
                "bordercolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the border color of all hover labels on graph."
                },
                "font": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "none",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                        "dflt": "Arial, sans-serif"
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "none",
                        "dflt": 13
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "none"
                    },
                    "editType": "none",
                    "description": "Sets the default hover label font used by all traces on the graph.",
                    "role": "object"
                },
                "namelength": {
                    "valType": "integer",
                    "min": -1,
                    "dflt": 15,
                    "role": "style",
                    "editType": "none",
                    "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."
                },
                "editType": "none",
                "role": "object"
            },
            "selectdirection": {
                "valType": "enumerated",
                "role": "info",
                "values": [
                    "h",
                    "v",
                    "d",
                    "any"
                ],
                "dflt": "any",
                "description": "When \"dragmode\" is set to \"select\", this limits the selection of the drag to horizontal, vertical or diagonal. \"h\" only allows horizontal selection, \"v\" only vertical, \"d\" only diagonal and \"any\" sets no limit.",
                "editType": "none"
            },
            "grid": {
                "rows": {
                    "valType": "integer",
                    "min": 1,
                    "role": "info",
                    "editType": "plot",
                    "description": "The number of rows in the grid. If you provide a 2D `subplots` array or a `yaxes` array, its length is used as the default. But it's also possible to have a different length, if you want to leave a row at the end for non-cartesian subplots."
                },
                "roworder": {
                    "valType": "enumerated",
                    "values": [
                        "top to bottom",
                        "bottom to top"
                    ],
                    "dflt": "top to bottom",
                    "role": "info",
                    "editType": "plot",
                    "description": "Is the first row the top or the bottom? Note that columns are always enumerated from left to right."
                },
                "columns": {
                    "valType": "integer",
                    "min": 1,
                    "role": "info",
                    "editType": "plot",
                    "description": "The number of columns in the grid. If you provide a 2D `subplots` array, the length of its longest row is used as the default. If you give an `xaxes` array, its length is used as the default. But it's also possible to have a different length, if you want to leave a row at the end for non-cartesian subplots."
                },
                "subplots": {
                    "valType": "info_array",
                    "freeLength": true,
                    "dimensions": 2,
                    "items": {
                        "valType": "enumerated",
                        "values": [
                            "/^x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?$/",
                            ""
                        ],
                        "editType": "plot"
                    },
                    "role": "info",
                    "editType": "plot",
                    "description": "Used for freeform grids, where some axes may be shared across subplots but others are not. Each entry should be a cartesian subplot id, like *xy* or *x3y2*, or ** to leave that cell empty. You may reuse x axes within the same column, and y axes within the same row. Non-cartesian subplots and traces that support `domain` can place themselves in this grid separately using the `gridcell` attribute."
                },
                "xaxes": {
                    "valType": "info_array",
                    "freeLength": true,
                    "items": {
                        "valType": "enumerated",
                        "values": [
                            "/^x([2-9]|[1-9][0-9]+)?$/",
                            ""
                        ],
                        "editType": "plot"
                    },
                    "role": "info",
                    "editType": "plot",
                    "description": "Used with `yaxes` when the x and y axes are shared across columns and rows. Each entry should be an x axis id like *x*, *x2*, etc., or ** to not put an x axis in that column. Entries other than ** must be unique. Ignored if `subplots` is present. If missing but `yaxes` is present, will generate consecutive IDs."
                },
                "yaxes": {
                    "valType": "info_array",
                    "freeLength": true,
                    "items": {
                        "valType": "enumerated",
                        "values": [
                            "/^y([2-9]|[1-9][0-9]+)?$/",
                            ""
                        ],
                        "editType": "plot"
                    },
                    "role": "info",
                    "editType": "plot",
                    "description": "Used with `yaxes` when the x and y axes are shared across columns and rows. Each entry should be an y axis id like *y*, *y2*, etc., or ** to not put a y axis in that row. Entries other than ** must be unique. Ignored if `subplots` is present. If missing but `xaxes` is present, will generate consecutive IDs."
                },
                "pattern": {
                    "valType": "enumerated",
                    "values": [
                        "independent",
                        "coupled"
                    ],
                    "dflt": "coupled",
                    "role": "info",
                    "editType": "plot",
                    "description": "If no `subplots`, `xaxes`, or `yaxes` are given but we do have `rows` and `columns`, we can generate defaults using consecutive axis IDs, in two ways: *coupled* gives one x axis per column and one y axis per row. *independent* uses a new xy pair for each cell, left-to-right across each row then iterating rows according to `roworder`."
                },
                "xgap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "role": "info",
                    "editType": "plot",
                    "description": "Horizontal space between grid cells, expressed as a fraction of the total width available to one cell. Defaults to 0.1 for coupled-axes grids and 0.2 for independent grids."
                },
                "ygap": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "role": "info",
                    "editType": "plot",
                    "description": "Vertical space between grid cells, expressed as a fraction of the total height available to one cell. Defaults to 0.1 for coupled-axes grids and 0.3 for independent grids."
                },
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "plot",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this grid subplot (in plot fraction). The first and last cells end exactly at the domain edges, with no grout around the edges."
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "plot",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this grid subplot (in plot fraction). The first and last cells end exactly at the domain edges, with no grout around the edges."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "xside": {
                    "valType": "enumerated",
                    "values": [
                        "bottom",
                        "bottom plot",
                        "top plot",
                        "top"
                    ],
                    "dflt": "bottom plot",
                    "role": "info",
                    "editType": "plot",
                    "description": "Sets where the x axis labels and titles go. *bottom* means the very bottom of the grid. *bottom plot* is the lowest plot that each x axis is used in. *top* and *top plot* are similar."
                },
                "yside": {
                    "valType": "enumerated",
                    "values": [
                        "left",
                        "left plot",
                        "right plot",
                        "right"
                    ],
                    "dflt": "left plot",
                    "role": "info",
                    "editType": "plot",
                    "description": "Sets where the y axis labels and titles go. *left* means the very left edge of the grid. *left plot* is the leftmost plot that each y axis is used in. *right* and *right plot* are similar."
                },
                "editType": "plot",
                "role": "object"
            },
            "calendar": {
                "valType": "enumerated",
                "values": [
                    "gregorian",
                    "chinese",
                    "coptic",
                    "discworld",
                    "ethiopian",
                    "hebrew",
                    "islamic",
                    "julian",
                    "mayan",
                    "nanakshahi",
                    "nepali",
                    "persian",
                    "jalali",
                    "taiwan",
                    "thai",
                    "ummalqura"
                ],
                "role": "info",
                "editType": "calc",
                "dflt": "gregorian",
                "description": "Sets the default calendar system to use for interpreting and displaying dates throughout the plot."
            },
            "xaxis": {
                "visible": {
                    "valType": "boolean",
                    "role": "info",
                    "editType": "plot",
                    "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false"
                },
                "color": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                },
                "title": {
                    "valType": "string",
                    "role": "info",
                    "editType": "ticks",
                    "description": "Sets the title of this axis."
                },
                "titlefont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "ticks",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "ticks"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "ticks"
                    },
                    "editType": "ticks",
                    "description": "Sets this axis' title font.",
                    "role": "object"
                },
                "type": {
                    "valType": "enumerated",
                    "values": [
                        "-",
                        "linear",
                        "log",
                        "date",
                        "category"
                    ],
                    "dflt": "-",
                    "role": "info",
                    "editType": "calc",
                    "_noTemplating": true,
                    "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question."
                },
                "autorange": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "reversed"
                    ],
                    "dflt": true,
                    "role": "info",
                    "editType": "axrange",
                    "impliedEdits": {},
                    "description": "Determines whether or not the range of this axis is computed in relation to the input data. See `rangemode` for more info. If `range` is provided, then `autorange` is set to *false*."
                },
                "rangemode": {
                    "valType": "enumerated",
                    "values": [
                        "normal",
                        "tozero",
                        "nonnegative"
                    ],
                    "dflt": "normal",
                    "role": "info",
                    "editType": "plot",
                    "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes."
                },
                "range": {
                    "valType": "info_array",
                    "role": "info",
                    "items": [
                        {
                            "valType": "any",
                            "editType": "axrange",
                            "impliedEdits": {
                                "^autorange": false
                            }
                        },
                        {
                            "valType": "any",
                            "editType": "axrange",
                            "impliedEdits": {
                                "^autorange": false
                            }
                        }
                    ],
                    "editType": "axrange",
                    "impliedEdits": {
                        "autorange": false
                    },
                    "description": "Sets the range of this axis. If the axis `type` is *log*, then you must take the log of your desired range (e.g. to set the range from 1 to 100, set the range from 0 to 2). If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                },
                "fixedrange": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not this axis is zoom-able. If true, then zoom is disabled."
                },
                "scaleanchor": {
                    "valType": "enumerated",
                    "values": [
                        "/^x([2-9]|[1-9][0-9]+)?$/",
                        "/^y([2-9]|[1-9][0-9]+)?$/"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "If set to another axis id (e.g. `x2`, `y`), the range of this axis changes together with the range of the corresponding axis such that the scale of pixels per unit is in a constant ratio. Both axes are still zoomable, but when you zoom one, the other will zoom the same amount, keeping a fixed midpoint. `constrain` and `constraintoward` determine how we enforce the constraint. You can chain these, ie `yaxis: {scaleanchor: *x*}, xaxis2: {scaleanchor: *y*}` but you can only link axes of the same `type`. The linked axis can have the opposite letter (to constrain the aspect ratio) or the same letter (to match scales across subplots). Loops (`yaxis: {scaleanchor: *x*}, xaxis: {scaleanchor: *y*}` or longer) are redundant and the last constraint encountered will be ignored to avoid possible inconsistent constraints via `scaleratio`."
                },
                "scaleratio": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "role": "info",
                    "editType": "plot",
                    "description": "If this axis is linked to another by `scaleanchor`, this determines the pixel to unit scale ratio. For example, if this value is 10, then every unit on this axis spans 10 times the number of pixels as a unit on the linked axis. Use this for example to create an elevation profile where the vertical scale is exaggerated a fixed amount with respect to the horizontal."
                },
                "constrain": {
                    "valType": "enumerated",
                    "values": [
                        "range",
                        "domain"
                    ],
                    "dflt": "range",
                    "role": "info",
                    "editType": "plot",
                    "description": "If this axis needs to be compressed (either due to its own `scaleanchor` and `scaleratio` or those of the other axis), determines how that happens: by increasing the *range* (default), or by decreasing the *domain*."
                },
                "constraintoward": {
                    "valType": "enumerated",
                    "values": [
                        "left",
                        "center",
                        "right",
                        "top",
                        "middle",
                        "bottom"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "If this axis needs to be compressed (either due to its own `scaleanchor` and `scaleratio` or those of the other axis), determines which direction we push the originally specified plot area. Options are *left*, *center* (default), and *right* for x axes, and *top*, *middle* (default), and *bottom* for y axes."
                },
                "tickmode": {
                    "valType": "enumerated",
                    "values": [
                        "auto",
                        "linear",
                        "array"
                    ],
                    "role": "info",
                    "editType": "ticks",
                    "impliedEdits": {},
                    "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)."
                },
                "nticks": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "ticks",
                    "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*."
                },
                "tick0": {
                    "valType": "any",
                    "role": "style",
                    "editType": "ticks",
                    "impliedEdits": {
                        "tickmode": "linear"
                    },
                    "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<f>* (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."
                },
                "dtick": {
                    "valType": "any",
                    "role": "style",
                    "editType": "ticks",
                    "impliedEdits": {
                        "tickmode": "linear"
                    },
                    "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<f>*, 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<n>* 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*"
                },
                "tickvals": {
                    "valType": "data_array",
                    "editType": "ticks",
                    "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                    "role": "data"
                },
                "ticktext": {
                    "valType": "data_array",
                    "editType": "ticks",
                    "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                    "role": "data"
                },
                "ticks": {
                    "valType": "enumerated",
                    "values": [
                        "outside",
                        "inside",
                        ""
                    ],
                    "role": "style",
                    "editType": "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."
                },
                "mirror": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        "ticks",
                        false,
                        "all",
                        "allticks"
                    ],
                    "dflt": false,
                    "role": "style",
                    "editType": "ticks+layoutstyle",
                    "description": "Determines if the axis lines or/and ticks are mirrored to the opposite side of the plotting area. If *true*, the axis lines are mirrored. If *ticks*, the axis lines and ticks are mirrored. If *false*, mirroring is disable. If *all*, axis lines are mirrored on all shared-axes subplots. If *allticks*, axis lines and ticks are mirrored on all shared-axes subplots."
                },
                "ticklen": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 5,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the tick length (in px)."
                },
                "tickwidth": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the tick width (in px)."
                },
                "tickcolor": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the tick color."
                },
                "showticklabels": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Determines whether or not the tick labels are drawn."
                },
                "automargin": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Determines whether long tick labels automatically grow the figure margins."
                },
                "showspikes": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "style",
                    "editType": "modebar",
                    "description": "Determines whether or not spikes (aka droplines) are drawn for this axis. Note: This only takes affect when hovermode = closest"
                },
                "spikecolor": {
                    "valType": "color",
                    "dflt": null,
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the spike color. If undefined, will use the series color"
                },
                "spikethickness": {
                    "valType": "number",
                    "dflt": 3,
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the width (in px) of the zero line."
                },
                "spikedash": {
                    "valType": "string",
                    "values": [
                        "solid",
                        "dot",
                        "dash",
                        "longdash",
                        "dashdot",
                        "longdashdot"
                    ],
                    "dflt": "dash",
                    "role": "style",
                    "editType": "none",
                    "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*)."
                },
                "spikemode": {
                    "valType": "flaglist",
                    "flags": [
                        "toaxis",
                        "across",
                        "marker"
                    ],
                    "role": "style",
                    "dflt": "toaxis",
                    "editType": "none",
                    "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the  series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on"
                },
                "spikesnap": {
                    "valType": "enumerated",
                    "values": [
                        "data",
                        "cursor"
                    ],
                    "dflt": "data",
                    "role": "style",
                    "editType": "none",
                    "description": "Determines whether spikelines are stuck to the cursor or to the closest datapoints."
                },
                "tickfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "ticks",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "ticks"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "ticks"
                    },
                    "editType": "ticks",
                    "description": "Sets the tick font.",
                    "role": "object"
                },
                "tickangle": {
                    "valType": "angle",
                    "dflt": "auto",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                },
                "tickprefix": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets a tick label prefix."
                },
                "showtickprefix": {
                    "valType": "enumerated",
                    "values": [
                        "all",
                        "first",
                        "last",
                        "none"
                    ],
                    "dflt": "all",
                    "role": "style",
                    "editType": "ticks",
                    "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."
                },
                "ticksuffix": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets a tick label suffix."
                },
                "showticksuffix": {
                    "valType": "enumerated",
                    "values": [
                        "all",
                        "first",
                        "last",
                        "none"
                    ],
                    "dflt": "all",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Same as `showtickprefix` but for tick suffixes."
                },
                "showexponent": {
                    "valType": "enumerated",
                    "values": [
                        "all",
                        "first",
                        "last",
                        "none"
                    ],
                    "dflt": "all",
                    "role": "style",
                    "editType": "ticks",
                    "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."
                },
                "exponentformat": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "e",
                        "E",
                        "power",
                        "SI",
                        "B"
                    ],
                    "dflt": "B",
                    "role": "style",
                    "editType": "ticks",
                    "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."
                },
                "separatethousands": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "style",
                    "editType": "ticks",
                    "description": "If \"true\", even 4-digit integers are separated"
                },
                "tickformat": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "ticks",
                    "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                },
                "tickformatstops": {
                    "items": {
                        "tickformatstop": {
                            "enabled": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": true,
                                "editType": "ticks",
                                "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                            },
                            "dtickrange": {
                                "valType": "info_array",
                                "role": "info",
                                "items": [
                                    {
                                        "valType": "any",
                                        "editType": "ticks"
                                    },
                                    {
                                        "valType": "any",
                                        "editType": "ticks"
                                    }
                                ],
                                "editType": "ticks",
                                "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*"
                            },
                            "value": {
                                "valType": "string",
                                "dflt": "",
                                "role": "style",
                                "editType": "ticks",
                                "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                            },
                            "editType": "ticks",
                            "name": {
                                "valType": "string",
                                "role": "style",
                                "editType": "none",
                                "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."
                            },
                            "templateitemname": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "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`."
                            },
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "hoverformat": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                },
                "showline": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "style",
                    "editType": "ticks+layoutstyle",
                    "description": "Determines whether or not a line bounding this axis is drawn."
                },
                "linecolor": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "layoutstyle",
                    "description": "Sets the axis line color."
                },
                "linewidth": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "role": "style",
                    "editType": "ticks+layoutstyle",
                    "description": "Sets the width (in px) of the axis line."
                },
                "showgrid": {
                    "valType": "boolean",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark."
                },
                "gridcolor": {
                    "valType": "color",
                    "dflt": "#eee",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the color of the grid lines."
                },
                "gridwidth": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the width (in px) of the grid lines."
                },
                "zeroline": {
                    "valType": "boolean",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Determines whether or not a line is drawn at along the 0 value of this axis. If *true*, the zero line is drawn on top of the grid lines."
                },
                "zerolinecolor": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the line color of the zero line."
                },
                "zerolinewidth": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the width (in px) of the zero line."
                },
                "anchor": {
                    "valType": "enumerated",
                    "values": [
                        "free",
                        "/^x([2-9]|[1-9][0-9]+)?$/",
                        "/^y([2-9]|[1-9][0-9]+)?$/"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "If set to an opposite-letter axis id (e.g. `x2`, `y`), this axis is bound to the corresponding opposite-letter axis. If set to *free*, this axis' position is determined by `position`."
                },
                "side": {
                    "valType": "enumerated",
                    "values": [
                        "top",
                        "bottom",
                        "left",
                        "right"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "Determines whether a x (y) axis is positioned at the *bottom* (*left*) or *top* (*right*) of the plotting area."
                },
                "overlaying": {
                    "valType": "enumerated",
                    "values": [
                        "free",
                        "/^x([2-9]|[1-9][0-9]+)?$/",
                        "/^y([2-9]|[1-9][0-9]+)?$/"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "If set a same-letter axis id, this axis is overlaid on top of the corresponding same-letter axis, with traces and axes visible for both axes. If *false*, this axis does not overlay any same-letter axes. In this case, for axes with overlapping domains only the highest-numbered axis will be visible."
                },
                "layer": {
                    "valType": "enumerated",
                    "values": [
                        "above traces",
                        "below traces"
                    ],
                    "dflt": "above traces",
                    "role": "info",
                    "editType": "plot",
                    "description": "Sets the layer on which this axis is displayed. If *above traces*, this axis is displayed above all the subplot's traces If *below traces*, this axis is displayed below all the subplot's traces, but above the grid lines. Useful when used together with scatter-like traces with `cliponaxis` set to *false* to show markers and/or text nodes above this axis."
                },
                "domain": {
                    "valType": "info_array",
                    "role": "info",
                    "items": [
                        {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "editType": "plot"
                        },
                        {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "editType": "plot"
                        }
                    ],
                    "dflt": [
                        0,
                        1
                    ],
                    "editType": "plot",
                    "description": "Sets the domain of this axis (in plot fraction)."
                },
                "position": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0,
                    "role": "style",
                    "editType": "plot",
                    "description": "Sets the position of this axis in the plotting space (in normalized coordinates). Only has an effect if `anchor` is set to *free*."
                },
                "categoryorder": {
                    "valType": "enumerated",
                    "values": [
                        "trace",
                        "category ascending",
                        "category descending",
                        "array"
                    ],
                    "dflt": "trace",
                    "role": "info",
                    "editType": "calc",
                    "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                },
                "categoryarray": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc",
                    "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                },
                "editType": "calc",
                "_deprecated": {
                    "autotick": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "ticks",
                        "description": "Obsolete. Set `tickmode` to *auto* for old `autotick` *true* behavior. Set `tickmode` to *linear* for `autotick` *false*."
                    }
                },
                "rangeslider": {
                    "bgcolor": {
                        "valType": "color",
                        "dflt": "#fff",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the background color of the range slider."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the border color of the range slider."
                    },
                    "borderwidth": {
                        "valType": "integer",
                        "dflt": 0,
                        "min": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the border color of the range slider."
                    },
                    "autorange": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "calc",
                        "impliedEdits": {},
                        "description": "Determines whether or not the range slider range is computed in relation to the input data. If `range` is provided, then `autorange` is set to *false*."
                    },
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "any",
                                "editType": "calc",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            },
                            {
                                "valType": "any",
                                "editType": "calc",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            }
                        ],
                        "editType": "calc",
                        "impliedEdits": {
                            "autorange": false
                        },
                        "description": "Sets the range of the range slider. If not set, defaults to the full xaxis range. If the axis `type` is *log*, then you must take the log of your desired range. If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                    },
                    "thickness": {
                        "valType": "number",
                        "dflt": 0.15,
                        "min": 0,
                        "max": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "The height of the range slider as a fraction of the total plot area height."
                    },
                    "visible": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "info",
                        "editType": "calc",
                        "description": "Determines whether or not the range slider will be visible. If visible, perpendicular axes will be set to `fixedrange`"
                    },
                    "editType": "calc",
                    "yaxis": {
                        "_isSubplotObj": true,
                        "rangemode": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "fixed",
                                "match"
                            ],
                            "dflt": "match",
                            "role": "style",
                            "editType": "calc",
                            "description": "Determines whether or not the range of this axis in the rangeslider use the same value than in the main plot when zooming in/out. If *auto*, the autorange will be used. If *fixed*, the `range` is used. If *match*, the current range of the corresponding y-axis on the main subplot is used."
                        },
                        "range": {
                            "valType": "info_array",
                            "role": "style",
                            "items": [
                                {
                                    "valType": "any",
                                    "editType": "plot"
                                },
                                {
                                    "valType": "any",
                                    "editType": "plot"
                                }
                            ],
                            "editType": "plot",
                            "description": "Sets the range of this axis for the rangeslider."
                        },
                        "editType": "calc",
                        "role": "object"
                    },
                    "role": "object"
                },
                "rangeselector": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "plot",
                        "description": "Determines whether or not this range selector is visible. Note that range selectors are only available for x axes of `type` set to or auto-typed to *date*."
                    },
                    "buttons": {
                        "items": {
                            "button": {
                                "visible": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this button is visible."
                                },
                                "step": {
                                    "valType": "enumerated",
                                    "role": "info",
                                    "values": [
                                        "month",
                                        "year",
                                        "day",
                                        "hour",
                                        "minute",
                                        "second",
                                        "all"
                                    ],
                                    "dflt": "month",
                                    "editType": "plot",
                                    "description": "The unit of measurement that the `count` value will set the range by."
                                },
                                "stepmode": {
                                    "valType": "enumerated",
                                    "role": "info",
                                    "values": [
                                        "backward",
                                        "todate"
                                    ],
                                    "dflt": "backward",
                                    "editType": "plot",
                                    "description": "Sets the range update mode. If *backward*, the range update shifts the start of range back *count* times *step* milliseconds. If *todate*, the range update shifts the start of range back to the first timestamp from *count* times *step* milliseconds back. For example, with `step` set to *year* and `count` set to *1* the range update shifts the start of the range back to January 01 of the current year. Month and year *todate* are currently available only for the built-in (Gregorian) calendar."
                                },
                                "count": {
                                    "valType": "number",
                                    "role": "info",
                                    "min": 0,
                                    "dflt": 1,
                                    "editType": "plot",
                                    "description": "Sets the number of steps to take to update the range. Use with `step` to specify the update interval."
                                },
                                "label": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "description": "Sets the text label to appear on the button."
                                },
                                "editType": "plot",
                                "description": "Sets the specifications for each buttons. By default, a range selector comes with no buttons.",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "none",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "calc",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "x": {
                        "valType": "number",
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the x position (in normalized coordinates) of the range selector."
                    },
                    "xanchor": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "left",
                            "center",
                            "right"
                        ],
                        "dflt": "left",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the range selector's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the range selector."
                    },
                    "y": {
                        "valType": "number",
                        "min": -2,
                        "max": 3,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the y position (in normalized coordinates) of the range selector."
                    },
                    "yanchor": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "top",
                            "middle",
                            "bottom"
                        ],
                        "dflt": "bottom",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the range selector's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the range selector."
                    },
                    "font": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the font of the range selector button text.",
                        "role": "object"
                    },
                    "bgcolor": {
                        "valType": "color",
                        "dflt": "#eee",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the background color of the range selector buttons."
                    },
                    "activecolor": {
                        "valType": "color",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the background color of the active range selector button."
                    },
                    "bordercolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the border enclosing the range selector."
                    },
                    "borderwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the border enclosing the range selector."
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "calendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use for `range` and `tick0` if this is a date axis. This does not set the calendar for interpreting data on this axis, that's specified in the trace or via the global `layout.calendar`"
                },
                "_isSubplotObj": true,
                "role": "object",
                "tickvalssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  tickvals .",
                    "editType": "none"
                },
                "ticktextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ticktext .",
                    "editType": "none"
                },
                "categoryarraysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  categoryarray .",
                    "editType": "none"
                }
            },
            "yaxis": {
                "visible": {
                    "valType": "boolean",
                    "role": "info",
                    "editType": "plot",
                    "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false"
                },
                "color": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                },
                "title": {
                    "valType": "string",
                    "role": "info",
                    "editType": "ticks",
                    "description": "Sets the title of this axis."
                },
                "titlefont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "ticks",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "ticks"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "ticks"
                    },
                    "editType": "ticks",
                    "description": "Sets this axis' title font.",
                    "role": "object"
                },
                "type": {
                    "valType": "enumerated",
                    "values": [
                        "-",
                        "linear",
                        "log",
                        "date",
                        "category"
                    ],
                    "dflt": "-",
                    "role": "info",
                    "editType": "calc",
                    "_noTemplating": true,
                    "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question."
                },
                "autorange": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        false,
                        "reversed"
                    ],
                    "dflt": true,
                    "role": "info",
                    "editType": "axrange",
                    "impliedEdits": {},
                    "description": "Determines whether or not the range of this axis is computed in relation to the input data. See `rangemode` for more info. If `range` is provided, then `autorange` is set to *false*."
                },
                "rangemode": {
                    "valType": "enumerated",
                    "values": [
                        "normal",
                        "tozero",
                        "nonnegative"
                    ],
                    "dflt": "normal",
                    "role": "info",
                    "editType": "plot",
                    "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes."
                },
                "range": {
                    "valType": "info_array",
                    "role": "info",
                    "items": [
                        {
                            "valType": "any",
                            "editType": "axrange",
                            "impliedEdits": {
                                "^autorange": false
                            }
                        },
                        {
                            "valType": "any",
                            "editType": "axrange",
                            "impliedEdits": {
                                "^autorange": false
                            }
                        }
                    ],
                    "editType": "axrange",
                    "impliedEdits": {
                        "autorange": false
                    },
                    "description": "Sets the range of this axis. If the axis `type` is *log*, then you must take the log of your desired range (e.g. to set the range from 1 to 100, set the range from 0 to 2). If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                },
                "fixedrange": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not this axis is zoom-able. If true, then zoom is disabled."
                },
                "scaleanchor": {
                    "valType": "enumerated",
                    "values": [
                        "/^x([2-9]|[1-9][0-9]+)?$/",
                        "/^y([2-9]|[1-9][0-9]+)?$/"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "If set to another axis id (e.g. `x2`, `y`), the range of this axis changes together with the range of the corresponding axis such that the scale of pixels per unit is in a constant ratio. Both axes are still zoomable, but when you zoom one, the other will zoom the same amount, keeping a fixed midpoint. `constrain` and `constraintoward` determine how we enforce the constraint. You can chain these, ie `yaxis: {scaleanchor: *x*}, xaxis2: {scaleanchor: *y*}` but you can only link axes of the same `type`. The linked axis can have the opposite letter (to constrain the aspect ratio) or the same letter (to match scales across subplots). Loops (`yaxis: {scaleanchor: *x*}, xaxis: {scaleanchor: *y*}` or longer) are redundant and the last constraint encountered will be ignored to avoid possible inconsistent constraints via `scaleratio`."
                },
                "scaleratio": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "role": "info",
                    "editType": "plot",
                    "description": "If this axis is linked to another by `scaleanchor`, this determines the pixel to unit scale ratio. For example, if this value is 10, then every unit on this axis spans 10 times the number of pixels as a unit on the linked axis. Use this for example to create an elevation profile where the vertical scale is exaggerated a fixed amount with respect to the horizontal."
                },
                "constrain": {
                    "valType": "enumerated",
                    "values": [
                        "range",
                        "domain"
                    ],
                    "dflt": "range",
                    "role": "info",
                    "editType": "plot",
                    "description": "If this axis needs to be compressed (either due to its own `scaleanchor` and `scaleratio` or those of the other axis), determines how that happens: by increasing the *range* (default), or by decreasing the *domain*."
                },
                "constraintoward": {
                    "valType": "enumerated",
                    "values": [
                        "left",
                        "center",
                        "right",
                        "top",
                        "middle",
                        "bottom"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "If this axis needs to be compressed (either due to its own `scaleanchor` and `scaleratio` or those of the other axis), determines which direction we push the originally specified plot area. Options are *left*, *center* (default), and *right* for x axes, and *top*, *middle* (default), and *bottom* for y axes."
                },
                "tickmode": {
                    "valType": "enumerated",
                    "values": [
                        "auto",
                        "linear",
                        "array"
                    ],
                    "role": "info",
                    "editType": "ticks",
                    "impliedEdits": {},
                    "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)."
                },
                "nticks": {
                    "valType": "integer",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "ticks",
                    "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*."
                },
                "tick0": {
                    "valType": "any",
                    "role": "style",
                    "editType": "ticks",
                    "impliedEdits": {
                        "tickmode": "linear"
                    },
                    "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<f>* (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."
                },
                "dtick": {
                    "valType": "any",
                    "role": "style",
                    "editType": "ticks",
                    "impliedEdits": {
                        "tickmode": "linear"
                    },
                    "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<f>*, 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<n>* 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*"
                },
                "tickvals": {
                    "valType": "data_array",
                    "editType": "ticks",
                    "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                    "role": "data"
                },
                "ticktext": {
                    "valType": "data_array",
                    "editType": "ticks",
                    "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                    "role": "data"
                },
                "ticks": {
                    "valType": "enumerated",
                    "values": [
                        "outside",
                        "inside",
                        ""
                    ],
                    "role": "style",
                    "editType": "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."
                },
                "mirror": {
                    "valType": "enumerated",
                    "values": [
                        true,
                        "ticks",
                        false,
                        "all",
                        "allticks"
                    ],
                    "dflt": false,
                    "role": "style",
                    "editType": "ticks+layoutstyle",
                    "description": "Determines if the axis lines or/and ticks are mirrored to the opposite side of the plotting area. If *true*, the axis lines are mirrored. If *ticks*, the axis lines and ticks are mirrored. If *false*, mirroring is disable. If *all*, axis lines are mirrored on all shared-axes subplots. If *allticks*, axis lines and ticks are mirrored on all shared-axes subplots."
                },
                "ticklen": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 5,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the tick length (in px)."
                },
                "tickwidth": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the tick width (in px)."
                },
                "tickcolor": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the tick color."
                },
                "showticklabels": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Determines whether or not the tick labels are drawn."
                },
                "automargin": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Determines whether long tick labels automatically grow the figure margins."
                },
                "showspikes": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "style",
                    "editType": "modebar",
                    "description": "Determines whether or not spikes (aka droplines) are drawn for this axis. Note: This only takes affect when hovermode = closest"
                },
                "spikecolor": {
                    "valType": "color",
                    "dflt": null,
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the spike color. If undefined, will use the series color"
                },
                "spikethickness": {
                    "valType": "number",
                    "dflt": 3,
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the width (in px) of the zero line."
                },
                "spikedash": {
                    "valType": "string",
                    "values": [
                        "solid",
                        "dot",
                        "dash",
                        "longdash",
                        "dashdot",
                        "longdashdot"
                    ],
                    "dflt": "dash",
                    "role": "style",
                    "editType": "none",
                    "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*)."
                },
                "spikemode": {
                    "valType": "flaglist",
                    "flags": [
                        "toaxis",
                        "across",
                        "marker"
                    ],
                    "role": "style",
                    "dflt": "toaxis",
                    "editType": "none",
                    "description": "Determines the drawing mode for the spike line If *toaxis*, the line is drawn from the data point to the axis the  series is plotted on. If *across*, the line is drawn across the entire plot area, and supercedes *toaxis*. If *marker*, then a marker dot is drawn on the axis the series is plotted on"
                },
                "spikesnap": {
                    "valType": "enumerated",
                    "values": [
                        "data",
                        "cursor"
                    ],
                    "dflt": "data",
                    "role": "style",
                    "editType": "none",
                    "description": "Determines whether spikelines are stuck to the cursor or to the closest datapoints."
                },
                "tickfont": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "ticks",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "ticks"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "ticks"
                    },
                    "editType": "ticks",
                    "description": "Sets the tick font.",
                    "role": "object"
                },
                "tickangle": {
                    "valType": "angle",
                    "dflt": "auto",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                },
                "tickprefix": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets a tick label prefix."
                },
                "showtickprefix": {
                    "valType": "enumerated",
                    "values": [
                        "all",
                        "first",
                        "last",
                        "none"
                    ],
                    "dflt": "all",
                    "role": "style",
                    "editType": "ticks",
                    "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."
                },
                "ticksuffix": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets a tick label suffix."
                },
                "showticksuffix": {
                    "valType": "enumerated",
                    "values": [
                        "all",
                        "first",
                        "last",
                        "none"
                    ],
                    "dflt": "all",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Same as `showtickprefix` but for tick suffixes."
                },
                "showexponent": {
                    "valType": "enumerated",
                    "values": [
                        "all",
                        "first",
                        "last",
                        "none"
                    ],
                    "dflt": "all",
                    "role": "style",
                    "editType": "ticks",
                    "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."
                },
                "exponentformat": {
                    "valType": "enumerated",
                    "values": [
                        "none",
                        "e",
                        "E",
                        "power",
                        "SI",
                        "B"
                    ],
                    "dflt": "B",
                    "role": "style",
                    "editType": "ticks",
                    "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."
                },
                "separatethousands": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "style",
                    "editType": "ticks",
                    "description": "If \"true\", even 4-digit integers are separated"
                },
                "tickformat": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "ticks",
                    "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                },
                "tickformatstops": {
                    "items": {
                        "tickformatstop": {
                            "enabled": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": true,
                                "editType": "ticks",
                                "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                            },
                            "dtickrange": {
                                "valType": "info_array",
                                "role": "info",
                                "items": [
                                    {
                                        "valType": "any",
                                        "editType": "ticks"
                                    },
                                    {
                                        "valType": "any",
                                        "editType": "ticks"
                                    }
                                ],
                                "editType": "ticks",
                                "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*"
                            },
                            "value": {
                                "valType": "string",
                                "dflt": "",
                                "role": "style",
                                "editType": "ticks",
                                "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                            },
                            "editType": "ticks",
                            "name": {
                                "valType": "string",
                                "role": "style",
                                "editType": "none",
                                "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."
                            },
                            "templateitemname": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "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`."
                            },
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "hoverformat": {
                    "valType": "string",
                    "dflt": "",
                    "role": "style",
                    "editType": "none",
                    "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                },
                "showline": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "style",
                    "editType": "ticks+layoutstyle",
                    "description": "Determines whether or not a line bounding this axis is drawn."
                },
                "linecolor": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "layoutstyle",
                    "description": "Sets the axis line color."
                },
                "linewidth": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "role": "style",
                    "editType": "ticks+layoutstyle",
                    "description": "Sets the width (in px) of the axis line."
                },
                "showgrid": {
                    "valType": "boolean",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark."
                },
                "gridcolor": {
                    "valType": "color",
                    "dflt": "#eee",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the color of the grid lines."
                },
                "gridwidth": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 1,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the width (in px) of the grid lines."
                },
                "zeroline": {
                    "valType": "boolean",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Determines whether or not a line is drawn at along the 0 value of this axis. If *true*, the zero line is drawn on top of the grid lines."
                },
                "zerolinecolor": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the line color of the zero line."
                },
                "zerolinewidth": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "style",
                    "editType": "ticks",
                    "description": "Sets the width (in px) of the zero line."
                },
                "anchor": {
                    "valType": "enumerated",
                    "values": [
                        "free",
                        "/^x([2-9]|[1-9][0-9]+)?$/",
                        "/^y([2-9]|[1-9][0-9]+)?$/"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "If set to an opposite-letter axis id (e.g. `x2`, `y`), this axis is bound to the corresponding opposite-letter axis. If set to *free*, this axis' position is determined by `position`."
                },
                "side": {
                    "valType": "enumerated",
                    "values": [
                        "top",
                        "bottom",
                        "left",
                        "right"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "Determines whether a x (y) axis is positioned at the *bottom* (*left*) or *top* (*right*) of the plotting area."
                },
                "overlaying": {
                    "valType": "enumerated",
                    "values": [
                        "free",
                        "/^x([2-9]|[1-9][0-9]+)?$/",
                        "/^y([2-9]|[1-9][0-9]+)?$/"
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "If set a same-letter axis id, this axis is overlaid on top of the corresponding same-letter axis, with traces and axes visible for both axes. If *false*, this axis does not overlay any same-letter axes. In this case, for axes with overlapping domains only the highest-numbered axis will be visible."
                },
                "layer": {
                    "valType": "enumerated",
                    "values": [
                        "above traces",
                        "below traces"
                    ],
                    "dflt": "above traces",
                    "role": "info",
                    "editType": "plot",
                    "description": "Sets the layer on which this axis is displayed. If *above traces*, this axis is displayed above all the subplot's traces If *below traces*, this axis is displayed below all the subplot's traces, but above the grid lines. Useful when used together with scatter-like traces with `cliponaxis` set to *false* to show markers and/or text nodes above this axis."
                },
                "domain": {
                    "valType": "info_array",
                    "role": "info",
                    "items": [
                        {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "editType": "plot"
                        },
                        {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "editType": "plot"
                        }
                    ],
                    "dflt": [
                        0,
                        1
                    ],
                    "editType": "plot",
                    "description": "Sets the domain of this axis (in plot fraction)."
                },
                "position": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0,
                    "role": "style",
                    "editType": "plot",
                    "description": "Sets the position of this axis in the plotting space (in normalized coordinates). Only has an effect if `anchor` is set to *free*."
                },
                "categoryorder": {
                    "valType": "enumerated",
                    "values": [
                        "trace",
                        "category ascending",
                        "category descending",
                        "array"
                    ],
                    "dflt": "trace",
                    "role": "info",
                    "editType": "calc",
                    "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                },
                "categoryarray": {
                    "valType": "data_array",
                    "role": "data",
                    "editType": "calc",
                    "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                },
                "editType": "calc",
                "_deprecated": {
                    "autotick": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "ticks",
                        "description": "Obsolete. Set `tickmode` to *auto* for old `autotick` *true* behavior. Set `tickmode` to *linear* for `autotick` *false*."
                    }
                },
                "calendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use for `range` and `tick0` if this is a date axis. This does not set the calendar for interpreting data on this axis, that's specified in the trace or via the global `layout.calendar`"
                },
                "_isSubplotObj": true,
                "role": "object",
                "tickvalssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  tickvals .",
                    "editType": "none"
                },
                "ticktextsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  ticktext .",
                    "editType": "none"
                },
                "categoryarraysrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  categoryarray .",
                    "editType": "none"
                }
            },
            "ternary": {
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this ternary subplot (in plot fraction).",
                        "editType": "plot"
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this ternary subplot (in plot fraction).",
                        "editType": "plot"
                    },
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this ternary subplot .",
                        "editType": "plot"
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this ternary subplot .",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "bgcolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#fff",
                    "description": "Set the background color of the subplot",
                    "editType": "plot"
                },
                "sum": {
                    "valType": "number",
                    "role": "info",
                    "dflt": 1,
                    "min": 0,
                    "description": "The number each triplet should sum to, and the maximum range of each axis",
                    "editType": "plot"
                },
                "aaxis": {
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the title of this axis."
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "color": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 1,
                        "dflt": 6,
                        "role": "style",
                        "editType": "plot",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label prefix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label suffix."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        }
                                    ],
                                    "editType": "plot",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "plot",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "plot",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "hoverformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.",
                        "dflt": true
                    },
                    "gridcolor": {
                        "valType": "color",
                        "dflt": "#eee",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the grid lines."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "layer": {
                        "valType": "enumerated",
                        "values": [
                            "above traces",
                            "below traces"
                        ],
                        "dflt": "above traces",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the layer on which this axis is displayed. If *above traces*, this axis is displayed above all the subplot's traces If *below traces*, this axis is displayed below all the subplot's traces, but above the grid lines. Useful when used together with scatter-like traces with `cliponaxis` set to *false* to show markers and/or text nodes above this axis."
                    },
                    "min": {
                        "valType": "number",
                        "dflt": 0,
                        "role": "info",
                        "min": 0,
                        "description": "The minimum value visible on this axis. The maximum is determined by the sum minus the minimum values of the other two axes. The full view corresponds to all the minima set to zero.",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "baxis": {
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the title of this axis."
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "color": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 1,
                        "dflt": 6,
                        "role": "style",
                        "editType": "plot",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label prefix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label suffix."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        }
                                    ],
                                    "editType": "plot",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "plot",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "plot",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "hoverformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.",
                        "dflt": true
                    },
                    "gridcolor": {
                        "valType": "color",
                        "dflt": "#eee",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the grid lines."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "layer": {
                        "valType": "enumerated",
                        "values": [
                            "above traces",
                            "below traces"
                        ],
                        "dflt": "above traces",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the layer on which this axis is displayed. If *above traces*, this axis is displayed above all the subplot's traces If *below traces*, this axis is displayed below all the subplot's traces, but above the grid lines. Useful when used together with scatter-like traces with `cliponaxis` set to *false* to show markers and/or text nodes above this axis."
                    },
                    "min": {
                        "valType": "number",
                        "dflt": 0,
                        "role": "info",
                        "min": 0,
                        "description": "The minimum value visible on this axis. The maximum is determined by the sum minus the minimum values of the other two axes. The full view corresponds to all the minima set to zero.",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "caxis": {
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the title of this axis."
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "color": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 1,
                        "dflt": 6,
                        "role": "style",
                        "editType": "plot",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label prefix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label suffix."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        }
                                    ],
                                    "editType": "plot",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "plot",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "plot",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "hoverformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.",
                        "dflt": true
                    },
                    "gridcolor": {
                        "valType": "color",
                        "dflt": "#eee",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the grid lines."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "layer": {
                        "valType": "enumerated",
                        "values": [
                            "above traces",
                            "below traces"
                        ],
                        "dflt": "above traces",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the layer on which this axis is displayed. If *above traces*, this axis is displayed above all the subplot's traces If *below traces*, this axis is displayed below all the subplot's traces, but above the grid lines. Useful when used together with scatter-like traces with `cliponaxis` set to *false* to show markers and/or text nodes above this axis."
                    },
                    "min": {
                        "valType": "number",
                        "dflt": 0,
                        "role": "info",
                        "min": 0,
                        "description": "The minimum value visible on this axis. The maximum is determined by the sum minus the minimum values of the other two axes. The full view corresponds to all the minima set to zero.",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object",
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "editType": "plot",
                "_isSubplotObj": true,
                "role": "object"
            },
            "scene": {
                "_arrayAttrRegexps": [
                    {}
                ],
                "bgcolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "rgba(0,0,0,0)",
                    "editType": "plot"
                },
                "camera": {
                    "up": {
                        "x": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 0,
                            "editType": "camera"
                        },
                        "y": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 0,
                            "editType": "camera"
                        },
                        "z": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 1,
                            "editType": "camera"
                        },
                        "editType": "camera",
                        "description": "Sets the (x,y,z) components of the 'up' camera vector. This vector determines the up direction of this scene with respect to the page. The default is *{x: 0, y: 0, z: 1}* which means that the z axis points up.",
                        "role": "object"
                    },
                    "center": {
                        "x": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 0,
                            "editType": "camera"
                        },
                        "y": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 0,
                            "editType": "camera"
                        },
                        "z": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 0,
                            "editType": "camera"
                        },
                        "editType": "camera",
                        "description": "Sets the (x,y,z) components of the 'center' camera vector This vector determines the translation (x,y,z) space about the center of this scene. By default, there is no such translation.",
                        "role": "object"
                    },
                    "eye": {
                        "x": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 1.25,
                            "editType": "camera"
                        },
                        "y": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 1.25,
                            "editType": "camera"
                        },
                        "z": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 1.25,
                            "editType": "camera"
                        },
                        "editType": "camera",
                        "description": "Sets the (x,y,z) components of the 'eye' camera vector. This vector determines the view point about the origin of this scene.",
                        "role": "object"
                    },
                    "editType": "camera",
                    "role": "object"
                },
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "plot",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this scene subplot (in plot fraction)."
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "plot",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this scene subplot (in plot fraction)."
                    },
                    "editType": "plot",
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "plot",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this scene subplot ."
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "plot",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this scene subplot ."
                    },
                    "role": "object"
                },
                "aspectmode": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "auto",
                        "cube",
                        "data",
                        "manual"
                    ],
                    "dflt": "auto",
                    "editType": "plot",
                    "impliedEdits": {},
                    "description": "If *cube*, this scene's axes are drawn as a cube, regardless of the axes' ranges. If *data*, this scene's axes are drawn in proportion with the axes' ranges. If *manual*, this scene's axes are drawn in proportion with the input of *aspectratio* (the default behavior if *aspectratio* is provided). If *auto*, this scene's axes are drawn using the results of *data* except when one axis is more than four times the size of the two others, where in that case the results of *cube* are used."
                },
                "aspectratio": {
                    "x": {
                        "valType": "number",
                        "role": "info",
                        "min": 0,
                        "editType": "plot",
                        "impliedEdits": {
                            "^aspectmode": "manual"
                        }
                    },
                    "y": {
                        "valType": "number",
                        "role": "info",
                        "min": 0,
                        "editType": "plot",
                        "impliedEdits": {
                            "^aspectmode": "manual"
                        }
                    },
                    "z": {
                        "valType": "number",
                        "role": "info",
                        "min": 0,
                        "editType": "plot",
                        "impliedEdits": {
                            "^aspectmode": "manual"
                        }
                    },
                    "editType": "plot",
                    "impliedEdits": {
                        "aspectmode": "manual",
                        "role": "object"
                    },
                    "description": "Sets this scene's axis aspectratio.",
                    "role": "object"
                },
                "xaxis": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "plot",
                        "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false"
                    },
                    "showspikes": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not spikes starting from data points to this axis' wall are shown on hover.",
                        "editType": "plot"
                    },
                    "spikesides": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not spikes extending from the projection data points to this axis' wall boundaries are shown on hover.",
                        "editType": "plot"
                    },
                    "spikethickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 2,
                        "description": "Sets the thickness (in px) of the spikes.",
                        "editType": "plot"
                    },
                    "spikecolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "#444",
                        "description": "Sets the color of the spikes.",
                        "editType": "plot"
                    },
                    "showbackground": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "description": "Sets whether or not this axis' wall has a background color.",
                        "editType": "plot"
                    },
                    "backgroundcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(204, 204, 204, 0.5)",
                        "description": "Sets the background color of this axis' wall.",
                        "editType": "plot"
                    },
                    "showaxeslabels": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not this axis is labeled",
                        "editType": "plot"
                    },
                    "color": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "categoryorder": {
                        "valType": "enumerated",
                        "values": [
                            "trace",
                            "category ascending",
                            "category descending",
                            "array"
                        ],
                        "dflt": "trace",
                        "role": "info",
                        "editType": "plot",
                        "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                    },
                    "categoryarray": {
                        "valType": "data_array",
                        "role": "data",
                        "editType": "plot",
                        "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the title of this axis."
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "-",
                            "linear",
                            "log",
                            "date",
                            "category"
                        ],
                        "dflt": "-",
                        "role": "info",
                        "editType": "plot",
                        "_noTemplating": true,
                        "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question."
                    },
                    "autorange": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            false,
                            "reversed"
                        ],
                        "dflt": true,
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "description": "Determines whether or not the range of this axis is computed in relation to the input data. See `rangemode` for more info. If `range` is provided, then `autorange` is set to *false*."
                    },
                    "rangemode": {
                        "valType": "enumerated",
                        "values": [
                            "normal",
                            "tozero",
                            "nonnegative"
                        ],
                        "dflt": "normal",
                        "role": "info",
                        "editType": "plot",
                        "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes."
                    },
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "any",
                                "editType": "plot",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            },
                            {
                                "valType": "any",
                                "editType": "plot",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            }
                        ],
                        "editType": "plot",
                        "impliedEdits": {
                            "autorange": false
                        },
                        "description": "Sets the range of this axis. If the axis `type` is *log*, then you must take the log of your desired range (e.g. to set the range from 1 to 100, set the range from 0 to 2). If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "mirror": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            "ticks",
                            false,
                            "all",
                            "allticks"
                        ],
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines if the axis lines or/and ticks are mirrored to the opposite side of the plotting area. If *true*, the axis lines are mirrored. If *ticks*, the axis lines and ticks are mirrored. If *false*, mirroring is disable. If *all*, axis lines are mirrored on all shared-axes subplots. If *allticks*, axis lines and ticks are mirrored on all shared-axes subplots."
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        }
                                    ],
                                    "editType": "plot",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "plot",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "plot",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "hoverformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark."
                    },
                    "gridcolor": {
                        "valType": "color",
                        "dflt": "rgb(204, 204, 204)",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the grid lines."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "zeroline": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line is drawn at along the 0 value of this axis. If *true*, the zero line is drawn on top of the grid lines."
                    },
                    "zerolinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the line color of the zero line."
                    },
                    "zerolinewidth": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the zero line."
                    },
                    "editType": "plot",
                    "calendar": {
                        "valType": "enumerated",
                        "values": [
                            "gregorian",
                            "chinese",
                            "coptic",
                            "discworld",
                            "ethiopian",
                            "hebrew",
                            "islamic",
                            "julian",
                            "mayan",
                            "nanakshahi",
                            "nepali",
                            "persian",
                            "jalali",
                            "taiwan",
                            "thai",
                            "ummalqura"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "dflt": "gregorian",
                        "description": "Sets the calendar system to use for `range` and `tick0` if this is a date axis. This does not set the calendar for interpreting data on this axis, that's specified in the trace or via the global `layout.calendar`"
                    },
                    "role": "object",
                    "categoryarraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  categoryarray .",
                        "editType": "none"
                    },
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "yaxis": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "plot",
                        "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false"
                    },
                    "showspikes": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not spikes starting from data points to this axis' wall are shown on hover.",
                        "editType": "plot"
                    },
                    "spikesides": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not spikes extending from the projection data points to this axis' wall boundaries are shown on hover.",
                        "editType": "plot"
                    },
                    "spikethickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 2,
                        "description": "Sets the thickness (in px) of the spikes.",
                        "editType": "plot"
                    },
                    "spikecolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "#444",
                        "description": "Sets the color of the spikes.",
                        "editType": "plot"
                    },
                    "showbackground": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "description": "Sets whether or not this axis' wall has a background color.",
                        "editType": "plot"
                    },
                    "backgroundcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(204, 204, 204, 0.5)",
                        "description": "Sets the background color of this axis' wall.",
                        "editType": "plot"
                    },
                    "showaxeslabels": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not this axis is labeled",
                        "editType": "plot"
                    },
                    "color": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "categoryorder": {
                        "valType": "enumerated",
                        "values": [
                            "trace",
                            "category ascending",
                            "category descending",
                            "array"
                        ],
                        "dflt": "trace",
                        "role": "info",
                        "editType": "plot",
                        "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                    },
                    "categoryarray": {
                        "valType": "data_array",
                        "role": "data",
                        "editType": "plot",
                        "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the title of this axis."
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "-",
                            "linear",
                            "log",
                            "date",
                            "category"
                        ],
                        "dflt": "-",
                        "role": "info",
                        "editType": "plot",
                        "_noTemplating": true,
                        "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question."
                    },
                    "autorange": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            false,
                            "reversed"
                        ],
                        "dflt": true,
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "description": "Determines whether or not the range of this axis is computed in relation to the input data. See `rangemode` for more info. If `range` is provided, then `autorange` is set to *false*."
                    },
                    "rangemode": {
                        "valType": "enumerated",
                        "values": [
                            "normal",
                            "tozero",
                            "nonnegative"
                        ],
                        "dflt": "normal",
                        "role": "info",
                        "editType": "plot",
                        "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes."
                    },
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "any",
                                "editType": "plot",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            },
                            {
                                "valType": "any",
                                "editType": "plot",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            }
                        ],
                        "editType": "plot",
                        "impliedEdits": {
                            "autorange": false
                        },
                        "description": "Sets the range of this axis. If the axis `type` is *log*, then you must take the log of your desired range (e.g. to set the range from 1 to 100, set the range from 0 to 2). If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "mirror": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            "ticks",
                            false,
                            "all",
                            "allticks"
                        ],
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines if the axis lines or/and ticks are mirrored to the opposite side of the plotting area. If *true*, the axis lines are mirrored. If *ticks*, the axis lines and ticks are mirrored. If *false*, mirroring is disable. If *all*, axis lines are mirrored on all shared-axes subplots. If *allticks*, axis lines and ticks are mirrored on all shared-axes subplots."
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        }
                                    ],
                                    "editType": "plot",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "plot",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "plot",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "hoverformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark."
                    },
                    "gridcolor": {
                        "valType": "color",
                        "dflt": "rgb(204, 204, 204)",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the grid lines."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "zeroline": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line is drawn at along the 0 value of this axis. If *true*, the zero line is drawn on top of the grid lines."
                    },
                    "zerolinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the line color of the zero line."
                    },
                    "zerolinewidth": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the zero line."
                    },
                    "editType": "plot",
                    "calendar": {
                        "valType": "enumerated",
                        "values": [
                            "gregorian",
                            "chinese",
                            "coptic",
                            "discworld",
                            "ethiopian",
                            "hebrew",
                            "islamic",
                            "julian",
                            "mayan",
                            "nanakshahi",
                            "nepali",
                            "persian",
                            "jalali",
                            "taiwan",
                            "thai",
                            "ummalqura"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "dflt": "gregorian",
                        "description": "Sets the calendar system to use for `range` and `tick0` if this is a date axis. This does not set the calendar for interpreting data on this axis, that's specified in the trace or via the global `layout.calendar`"
                    },
                    "role": "object",
                    "categoryarraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  categoryarray .",
                        "editType": "none"
                    },
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "zaxis": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "plot",
                        "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false"
                    },
                    "showspikes": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not spikes starting from data points to this axis' wall are shown on hover.",
                        "editType": "plot"
                    },
                    "spikesides": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not spikes extending from the projection data points to this axis' wall boundaries are shown on hover.",
                        "editType": "plot"
                    },
                    "spikethickness": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 2,
                        "description": "Sets the thickness (in px) of the spikes.",
                        "editType": "plot"
                    },
                    "spikecolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "#444",
                        "description": "Sets the color of the spikes.",
                        "editType": "plot"
                    },
                    "showbackground": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "description": "Sets whether or not this axis' wall has a background color.",
                        "editType": "plot"
                    },
                    "backgroundcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "rgba(204, 204, 204, 0.5)",
                        "description": "Sets the background color of this axis' wall.",
                        "editType": "plot"
                    },
                    "showaxeslabels": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": true,
                        "description": "Sets whether or not this axis is labeled",
                        "editType": "plot"
                    },
                    "color": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "categoryorder": {
                        "valType": "enumerated",
                        "values": [
                            "trace",
                            "category ascending",
                            "category descending",
                            "array"
                        ],
                        "dflt": "trace",
                        "role": "info",
                        "editType": "plot",
                        "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                    },
                    "categoryarray": {
                        "valType": "data_array",
                        "role": "data",
                        "editType": "plot",
                        "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the title of this axis."
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "-",
                            "linear",
                            "log",
                            "date",
                            "category"
                        ],
                        "dflt": "-",
                        "role": "info",
                        "editType": "plot",
                        "_noTemplating": true,
                        "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question."
                    },
                    "autorange": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            false,
                            "reversed"
                        ],
                        "dflt": true,
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "description": "Determines whether or not the range of this axis is computed in relation to the input data. See `rangemode` for more info. If `range` is provided, then `autorange` is set to *false*."
                    },
                    "rangemode": {
                        "valType": "enumerated",
                        "values": [
                            "normal",
                            "tozero",
                            "nonnegative"
                        ],
                        "dflt": "normal",
                        "role": "info",
                        "editType": "plot",
                        "description": "If *normal*, the range is computed in relation to the extrema of the input data. If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. Applies only to linear axes."
                    },
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "any",
                                "editType": "plot",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            },
                            {
                                "valType": "any",
                                "editType": "plot",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            }
                        ],
                        "editType": "plot",
                        "impliedEdits": {
                            "autorange": false
                        },
                        "description": "Sets the range of this axis. If the axis `type` is *log*, then you must take the log of your desired range (e.g. to set the range from 1 to 100, set the range from 0 to 2). If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "mirror": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            "ticks",
                            false,
                            "all",
                            "allticks"
                        ],
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines if the axis lines or/and ticks are mirrored to the opposite side of the plotting area. If *true*, the axis lines are mirrored. If *ticks*, the axis lines and ticks are mirrored. If *false*, mirroring is disable. If *all*, axis lines are mirrored on all shared-axes subplots. If *allticks*, axis lines and ticks are mirrored on all shared-axes subplots."
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label prefix."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label suffix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        }
                                    ],
                                    "editType": "plot",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "plot",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "plot",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "hoverformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark."
                    },
                    "gridcolor": {
                        "valType": "color",
                        "dflt": "rgb(204, 204, 204)",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the grid lines."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "zeroline": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line is drawn at along the 0 value of this axis. If *true*, the zero line is drawn on top of the grid lines."
                    },
                    "zerolinecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the line color of the zero line."
                    },
                    "zerolinewidth": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the zero line."
                    },
                    "editType": "plot",
                    "calendar": {
                        "valType": "enumerated",
                        "values": [
                            "gregorian",
                            "chinese",
                            "coptic",
                            "discworld",
                            "ethiopian",
                            "hebrew",
                            "islamic",
                            "julian",
                            "mayan",
                            "nanakshahi",
                            "nepali",
                            "persian",
                            "jalali",
                            "taiwan",
                            "thai",
                            "ummalqura"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "dflt": "gregorian",
                        "description": "Sets the calendar system to use for `range` and `tick0` if this is a date axis. This does not set the calendar for interpreting data on this axis, that's specified in the trace or via the global `layout.calendar`"
                    },
                    "role": "object",
                    "categoryarraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  categoryarray .",
                        "editType": "none"
                    },
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "dragmode": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "orbit",
                        "turntable",
                        "zoom",
                        "pan",
                        false
                    ],
                    "dflt": "turntable",
                    "editType": "plot",
                    "description": "Determines the mode of drag interactions for this scene."
                },
                "hovermode": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "closest",
                        false
                    ],
                    "dflt": "closest",
                    "editType": "modebar",
                    "description": "Determines the mode of hover interactions for this scene."
                },
                "editType": "plot",
                "_deprecated": {
                    "cameraposition": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "camera",
                        "description": "Obsolete. Use `camera` instead."
                    }
                },
                "annotations": {
                    "items": {
                        "annotation": {
                            "visible": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": true,
                                "editType": "calc",
                                "description": "Determines whether or not this annotation is visible."
                            },
                            "x": {
                                "valType": "any",
                                "role": "info",
                                "description": "Sets the annotation's x position.",
                                "editType": "calc"
                            },
                            "y": {
                                "valType": "any",
                                "role": "info",
                                "description": "Sets the annotation's y position.",
                                "editType": "calc"
                            },
                            "z": {
                                "valType": "any",
                                "role": "info",
                                "description": "Sets the annotation's z position.",
                                "editType": "calc"
                            },
                            "ax": {
                                "valType": "number",
                                "role": "info",
                                "description": "Sets the x component of the arrow tail about the arrow head (in pixels).",
                                "editType": "calc"
                            },
                            "ay": {
                                "valType": "number",
                                "role": "info",
                                "description": "Sets the y component of the arrow tail about the arrow head (in pixels).",
                                "editType": "calc"
                            },
                            "xanchor": {
                                "valType": "enumerated",
                                "values": [
                                    "auto",
                                    "left",
                                    "center",
                                    "right"
                                ],
                                "dflt": "auto",
                                "role": "info",
                                "editType": "calc",
                                "description": "Sets the text box's horizontal position anchor This anchor binds the `x` position to the *left*, *center* or *right* of the annotation. For example, if `x` is set to 1, `xref` to *paper* and `xanchor` to *right* then the right-most portion of the annotation lines up with the right-most edge of the plotting area. If *auto*, the anchor is equivalent to *center* for data-referenced annotations or if there is an arrow, whereas for paper-referenced with no arrow, the anchor picked corresponds to the closest side."
                            },
                            "xshift": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "calc",
                                "description": "Shifts the position of the whole annotation and arrow to the right (positive) or left (negative) by this many pixels."
                            },
                            "yanchor": {
                                "valType": "enumerated",
                                "values": [
                                    "auto",
                                    "top",
                                    "middle",
                                    "bottom"
                                ],
                                "dflt": "auto",
                                "role": "info",
                                "editType": "calc",
                                "description": "Sets the text box's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the annotation. For example, if `y` is set to 1, `yref` to *paper* and `yanchor` to *top* then the top-most portion of the annotation lines up with the top-most edge of the plotting area. If *auto*, the anchor is equivalent to *middle* for data-referenced annotations or if there is an arrow, whereas for paper-referenced with no arrow, the anchor picked corresponds to the closest side."
                            },
                            "yshift": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "calc",
                                "description": "Shifts the position of the whole annotation and arrow up (positive) or down (negative) by this many pixels."
                            },
                            "text": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "description": "Sets the text associated with this annotation. Plotly uses a subset of HTML tags to do things like newline (<br>), bold (<b></b>), italics (<i></i>), hyperlinks (<a href='...'></a>). Tags <em>, <sup>, <sub> <span> are also supported."
                            },
                            "textangle": {
                                "valType": "angle",
                                "dflt": 0,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the angle at which the `text` is drawn with respect to the horizontal."
                            },
                            "font": {
                                "family": {
                                    "valType": "string",
                                    "role": "style",
                                    "noBlank": true,
                                    "strict": true,
                                    "editType": "calc",
                                    "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                                },
                                "size": {
                                    "valType": "number",
                                    "role": "style",
                                    "min": 1,
                                    "editType": "calc"
                                },
                                "color": {
                                    "valType": "color",
                                    "role": "style",
                                    "editType": "calc"
                                },
                                "editType": "calc",
                                "description": "Sets the annotation text font.",
                                "role": "object"
                            },
                            "width": {
                                "valType": "number",
                                "min": 1,
                                "dflt": null,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets an explicit width for the text box. null (default) lets the text set the box width. Wider text will be clipped. There is no automatic wrapping; use <br> to start a new line."
                            },
                            "height": {
                                "valType": "number",
                                "min": 1,
                                "dflt": null,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets an explicit height for the text box. null (default) lets the text set the box height. Taller text will be clipped."
                            },
                            "opacity": {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "dflt": 1,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the opacity of the annotation (text + arrow)."
                            },
                            "align": {
                                "valType": "enumerated",
                                "values": [
                                    "left",
                                    "center",
                                    "right"
                                ],
                                "dflt": "center",
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the horizontal alignment of the `text` within the box. Has an effect only if `text` spans more two or more lines (i.e. `text` contains one or more <br> HTML tags) or if an explicit width is set to override the text width."
                            },
                            "valign": {
                                "valType": "enumerated",
                                "values": [
                                    "top",
                                    "middle",
                                    "bottom"
                                ],
                                "dflt": "middle",
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the vertical alignment of the `text` within the box. Has an effect only if an explicit height is set to override the text height."
                            },
                            "bgcolor": {
                                "valType": "color",
                                "dflt": "rgba(0,0,0,0)",
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the background color of the annotation."
                            },
                            "bordercolor": {
                                "valType": "color",
                                "dflt": "rgba(0,0,0,0)",
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the color of the border enclosing the annotation `text`."
                            },
                            "borderpad": {
                                "valType": "number",
                                "min": 0,
                                "dflt": 1,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the padding (in px) between the `text` and the enclosing border."
                            },
                            "borderwidth": {
                                "valType": "number",
                                "min": 0,
                                "dflt": 1,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the width (in px) of the border enclosing the annotation `text`."
                            },
                            "showarrow": {
                                "valType": "boolean",
                                "dflt": true,
                                "role": "style",
                                "editType": "calc",
                                "description": "Determines whether or not the annotation is drawn with an arrow. If *true*, `text` is placed near the arrow's tail. If *false*, `text` lines up with the `x` and `y` provided."
                            },
                            "arrowcolor": {
                                "valType": "color",
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the color of the annotation arrow."
                            },
                            "arrowhead": {
                                "valType": "integer",
                                "min": 0,
                                "max": 8,
                                "dflt": 1,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the end annotation arrow head style."
                            },
                            "startarrowhead": {
                                "valType": "integer",
                                "min": 0,
                                "max": 8,
                                "dflt": 1,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the start annotation arrow head style."
                            },
                            "arrowside": {
                                "valType": "flaglist",
                                "flags": [
                                    "end",
                                    "start"
                                ],
                                "extras": [
                                    "none"
                                ],
                                "dflt": "end",
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the annotation arrow head position."
                            },
                            "arrowsize": {
                                "valType": "number",
                                "min": 0.3,
                                "dflt": 1,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the size of the end annotation arrow head, relative to `arrowwidth`. A value of 1 (default) gives a head about 3x as wide as the line."
                            },
                            "startarrowsize": {
                                "valType": "number",
                                "min": 0.3,
                                "dflt": 1,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the size of the start annotation arrow head, relative to `arrowwidth`. A value of 1 (default) gives a head about 3x as wide as the line."
                            },
                            "arrowwidth": {
                                "valType": "number",
                                "min": 0.1,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets the width (in px) of annotation arrow line."
                            },
                            "standoff": {
                                "valType": "number",
                                "min": 0,
                                "dflt": 0,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets a distance, in pixels, to move the end arrowhead away from the position it is pointing at, for example to point at the edge of a marker independent of zoom. Note that this shortens the arrow from the `ax` / `ay` vector, in contrast to `xshift` / `yshift` which moves everything by this amount."
                            },
                            "startstandoff": {
                                "valType": "number",
                                "min": 0,
                                "dflt": 0,
                                "role": "style",
                                "editType": "calc",
                                "description": "Sets a distance, in pixels, to move the start arrowhead away from the position it is pointing at, for example to point at the edge of a marker independent of zoom. Note that this shortens the arrow from the `ax` / `ay` vector, in contrast to `xshift` / `yshift` which moves everything by this amount."
                            },
                            "hovertext": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "description": "Sets text to appear when hovering over this annotation. If omitted or blank, no hover label will appear."
                            },
                            "hoverlabel": {
                                "bgcolor": {
                                    "valType": "color",
                                    "role": "style",
                                    "editType": "calc",
                                    "description": "Sets the background color of the hover label. By default uses the annotation's `bgcolor` made opaque, or white if it was transparent."
                                },
                                "bordercolor": {
                                    "valType": "color",
                                    "role": "style",
                                    "editType": "calc",
                                    "description": "Sets the border color of the hover label. By default uses either dark grey or white, for maximum contrast with `hoverlabel.bgcolor`."
                                },
                                "font": {
                                    "family": {
                                        "valType": "string",
                                        "role": "style",
                                        "noBlank": true,
                                        "strict": true,
                                        "editType": "calc",
                                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                                    },
                                    "size": {
                                        "valType": "number",
                                        "role": "style",
                                        "min": 1,
                                        "editType": "calc"
                                    },
                                    "color": {
                                        "valType": "color",
                                        "role": "style",
                                        "editType": "calc"
                                    },
                                    "editType": "calc",
                                    "description": "Sets the hover label text font. By default uses the global hover font and size, with color from `hoverlabel.bordercolor`.",
                                    "role": "object"
                                },
                                "editType": "calc",
                                "role": "object"
                            },
                            "captureevents": {
                                "valType": "boolean",
                                "role": "info",
                                "editType": "calc",
                                "description": "Determines whether the annotation text box captures mouse move and click events, or allows those events to pass through to data points in the plot that may be behind the annotation. By default `captureevents` is *false* unless `hovertext` is provided. If you use the event `plotly_clickannotation` without `hovertext` you must explicitly enable `captureevents`."
                            },
                            "name": {
                                "valType": "string",
                                "role": "style",
                                "editType": "calc",
                                "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."
                            },
                            "templateitemname": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "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",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "_isSubplotObj": true,
                "role": "object"
            },
            "geo": {
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this geo subplot (in plot fraction). Note that geo subplots are constrained by domain. In general, when `projection.scale` is set to 1. a map will fit either its x or y domain, but not both.",
                        "editType": "plot"
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this geo subplot (in plot fraction). Note that geo subplots are constrained by domain. In general, when `projection.scale` is set to 1. a map will fit either its x or y domain, but not both.",
                        "editType": "plot"
                    },
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this geo subplot . Note that geo subplots are constrained by domain. In general, when `projection.scale` is set to 1. a map will fit either its x or y domain, but not both.",
                        "editType": "plot"
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this geo subplot . Note that geo subplots are constrained by domain. In general, when `projection.scale` is set to 1. a map will fit either its x or y domain, but not both.",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "resolution": {
                    "valType": "enumerated",
                    "values": [
                        110,
                        50
                    ],
                    "role": "info",
                    "dflt": 110,
                    "coerceNumber": true,
                    "description": "Sets the resolution of the base layers. The values have units of km/mm e.g. 110 corresponds to a scale ratio of 1:110,000,000.",
                    "editType": "plot"
                },
                "scope": {
                    "valType": "enumerated",
                    "role": "info",
                    "values": [
                        "world",
                        "usa",
                        "europe",
                        "asia",
                        "africa",
                        "north america",
                        "south america"
                    ],
                    "dflt": "world",
                    "description": "Set the scope of the map.",
                    "editType": "plot"
                },
                "projection": {
                    "type": {
                        "valType": "enumerated",
                        "role": "info",
                        "values": [
                            "equirectangular",
                            "mercator",
                            "orthographic",
                            "natural earth",
                            "kavrayskiy7",
                            "miller",
                            "robinson",
                            "eckert4",
                            "azimuthal equal area",
                            "azimuthal equidistant",
                            "conic equal area",
                            "conic conformal",
                            "conic equidistant",
                            "gnomonic",
                            "stereographic",
                            "mollweide",
                            "hammer",
                            "transverse mercator",
                            "albers usa",
                            "winkel tripel",
                            "aitoff",
                            "sinusoidal"
                        ],
                        "description": "Sets the projection type.",
                        "editType": "plot"
                    },
                    "rotation": {
                        "lon": {
                            "valType": "number",
                            "role": "info",
                            "description": "Rotates the map along parallels (in degrees East). Defaults to the center of the `lonaxis.range` values.",
                            "editType": "plot"
                        },
                        "lat": {
                            "valType": "number",
                            "role": "info",
                            "description": "Rotates the map along meridians (in degrees North).",
                            "editType": "plot"
                        },
                        "roll": {
                            "valType": "number",
                            "role": "info",
                            "description": "Roll the map (in degrees) For example, a roll of *180* makes the map appear upside down.",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "role": "object"
                    },
                    "parallels": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "editType": "plot"
                            }
                        ],
                        "description": "For conic projection types only. Sets the parallels (tangent, secant) where the cone intersects the sphere.",
                        "editType": "plot"
                    },
                    "scale": {
                        "valType": "number",
                        "role": "info",
                        "min": 0,
                        "dflt": 1,
                        "description": "Zooms in or out on the map view. A scale of *1* corresponds to the largest zoom level that fits the map's lon and lat ranges. ",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "center": {
                    "lon": {
                        "valType": "number",
                        "role": "info",
                        "description": "Sets the longitude of the map's center. By default, the map's longitude center lies at the middle of the longitude range for scoped projection and above `projection.rotation.lon` otherwise.",
                        "editType": "plot"
                    },
                    "lat": {
                        "valType": "number",
                        "role": "info",
                        "description": "Sets the latitude of the map's center. For all projection types, the map's latitude center lies at the middle of the latitude range by default.",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "showcoastlines": {
                    "valType": "boolean",
                    "role": "info",
                    "description": "Sets whether or not the coastlines are drawn.",
                    "editType": "plot"
                },
                "coastlinecolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#444",
                    "description": "Sets the coastline color.",
                    "editType": "plot"
                },
                "coastlinewidth": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "dflt": 1,
                    "description": "Sets the coastline stroke width (in px).",
                    "editType": "plot"
                },
                "showland": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": false,
                    "description": "Sets whether or not land masses are filled in color.",
                    "editType": "plot"
                },
                "landcolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#F0DC82",
                    "description": "Sets the land mass color.",
                    "editType": "plot"
                },
                "showocean": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": false,
                    "description": "Sets whether or not oceans are filled in color.",
                    "editType": "plot"
                },
                "oceancolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#3399FF",
                    "description": "Sets the ocean color",
                    "editType": "plot"
                },
                "showlakes": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": false,
                    "description": "Sets whether or not lakes are drawn.",
                    "editType": "plot"
                },
                "lakecolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#3399FF",
                    "description": "Sets the color of the lakes.",
                    "editType": "plot"
                },
                "showrivers": {
                    "valType": "boolean",
                    "role": "info",
                    "dflt": false,
                    "description": "Sets whether or not rivers are drawn.",
                    "editType": "plot"
                },
                "rivercolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#3399FF",
                    "description": "Sets color of the rivers.",
                    "editType": "plot"
                },
                "riverwidth": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "dflt": 1,
                    "description": "Sets the stroke width (in px) of the rivers.",
                    "editType": "plot"
                },
                "showcountries": {
                    "valType": "boolean",
                    "role": "info",
                    "description": "Sets whether or not country boundaries are drawn.",
                    "editType": "plot"
                },
                "countrycolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#444",
                    "description": "Sets line color of the country boundaries.",
                    "editType": "plot"
                },
                "countrywidth": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "dflt": 1,
                    "description": "Sets line width (in px) of the country boundaries.",
                    "editType": "plot"
                },
                "showsubunits": {
                    "valType": "boolean",
                    "role": "info",
                    "description": "Sets whether or not boundaries of subunits within countries (e.g. states, provinces) are drawn.",
                    "editType": "plot"
                },
                "subunitcolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#444",
                    "description": "Sets the color of the subunits boundaries.",
                    "editType": "plot"
                },
                "subunitwidth": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "dflt": 1,
                    "description": "Sets the stroke width (in px) of the subunits boundaries.",
                    "editType": "plot"
                },
                "showframe": {
                    "valType": "boolean",
                    "role": "info",
                    "description": "Sets whether or not a frame is drawn around the map.",
                    "editType": "plot"
                },
                "framecolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#444",
                    "description": "Sets the color the frame.",
                    "editType": "plot"
                },
                "framewidth": {
                    "valType": "number",
                    "role": "style",
                    "min": 0,
                    "dflt": 1,
                    "description": "Sets the stroke width (in px) of the frame.",
                    "editType": "plot"
                },
                "bgcolor": {
                    "valType": "color",
                    "role": "style",
                    "dflt": "#fff",
                    "description": "Set the background color of the map",
                    "editType": "plot"
                },
                "lonaxis": {
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "editType": "plot"
                            }
                        ],
                        "description": "Sets the range of this axis (in degrees), sets the map's clipped coordinates.",
                        "editType": "plot"
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "description": "Sets whether or not graticule are shown on the map.",
                        "editType": "plot"
                    },
                    "tick0": {
                        "valType": "number",
                        "role": "info",
                        "description": "Sets the graticule's starting tick longitude/latitude.",
                        "editType": "plot"
                    },
                    "dtick": {
                        "valType": "number",
                        "role": "info",
                        "description": "Sets the graticule's longitude/latitude tick step.",
                        "editType": "plot"
                    },
                    "gridcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "#eee",
                        "description": "Sets the graticule's stroke color.",
                        "editType": "plot"
                    },
                    "gridwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 1,
                        "description": "Sets the graticule's stroke width (in px).",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "lataxis": {
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "editType": "plot"
                            }
                        ],
                        "description": "Sets the range of this axis (in degrees), sets the map's clipped coordinates.",
                        "editType": "plot"
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "info",
                        "dflt": false,
                        "description": "Sets whether or not graticule are shown on the map.",
                        "editType": "plot"
                    },
                    "tick0": {
                        "valType": "number",
                        "role": "info",
                        "description": "Sets the graticule's starting tick longitude/latitude.",
                        "editType": "plot"
                    },
                    "dtick": {
                        "valType": "number",
                        "role": "info",
                        "description": "Sets the graticule's longitude/latitude tick step.",
                        "editType": "plot"
                    },
                    "gridcolor": {
                        "valType": "color",
                        "role": "style",
                        "dflt": "#eee",
                        "description": "Sets the graticule's stroke color.",
                        "editType": "plot"
                    },
                    "gridwidth": {
                        "valType": "number",
                        "role": "style",
                        "min": 0,
                        "dflt": 1,
                        "description": "Sets the graticule's stroke width (in px).",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "editType": "plot",
                "_isSubplotObj": true,
                "role": "object"
            },
            "mapbox": {
                "_arrayAttrRegexps": [
                    {}
                ],
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this mapbox subplot (in plot fraction).",
                        "editType": "plot"
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this mapbox subplot (in plot fraction).",
                        "editType": "plot"
                    },
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this mapbox subplot .",
                        "editType": "plot"
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this mapbox subplot .",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "accesstoken": {
                    "valType": "string",
                    "noBlank": true,
                    "strict": true,
                    "role": "info",
                    "description": "Sets the mapbox access token to be used for this mapbox map. Alternatively, the mapbox access token can be set in the configuration options under `mapboxAccessToken`.",
                    "editType": "plot"
                },
                "style": {
                    "valType": "any",
                    "values": [
                        "basic",
                        "streets",
                        "outdoors",
                        "light",
                        "dark",
                        "satellite",
                        "satellite-streets"
                    ],
                    "dflt": "basic",
                    "role": "style",
                    "description": "Sets the Mapbox map style. Either input one of the default Mapbox style names or the URL to a custom style or a valid Mapbox style JSON.",
                    "editType": "plot"
                },
                "center": {
                    "lon": {
                        "valType": "number",
                        "dflt": 0,
                        "role": "info",
                        "description": "Sets the longitude of the center of the map (in degrees East).",
                        "editType": "plot"
                    },
                    "lat": {
                        "valType": "number",
                        "dflt": 0,
                        "role": "info",
                        "description": "Sets the latitude of the center of the map (in degrees North).",
                        "editType": "plot"
                    },
                    "editType": "plot",
                    "role": "object"
                },
                "zoom": {
                    "valType": "number",
                    "dflt": 1,
                    "role": "info",
                    "description": "Sets the zoom level of the map.",
                    "editType": "plot"
                },
                "bearing": {
                    "valType": "number",
                    "dflt": 0,
                    "role": "info",
                    "description": "Sets the bearing angle of the map (in degrees counter-clockwise from North).",
                    "editType": "plot"
                },
                "pitch": {
                    "valType": "number",
                    "dflt": 0,
                    "role": "info",
                    "description": "Sets the pitch angle of the map (in degrees, where *0* means perpendicular to the surface of the map).",
                    "editType": "plot"
                },
                "layers": {
                    "items": {
                        "layer": {
                            "visible": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": true,
                                "description": "Determines whether this layer is displayed",
                                "editType": "plot"
                            },
                            "sourcetype": {
                                "valType": "enumerated",
                                "values": [
                                    "geojson",
                                    "vector"
                                ],
                                "dflt": "geojson",
                                "role": "info",
                                "description": "Sets the source type for this layer. Support for *raster*, *image* and *video* source types is coming soon.",
                                "editType": "plot"
                            },
                            "source": {
                                "valType": "any",
                                "role": "info",
                                "description": "Sets the source data for this layer. Source can be either a URL, a geojson object (with `sourcetype` set to *geojson*) or an array of tile URLS (with `sourcetype` set to *vector*).",
                                "editType": "plot"
                            },
                            "sourcelayer": {
                                "valType": "string",
                                "dflt": "",
                                "role": "info",
                                "description": "Specifies the layer to use from a vector tile source. Required for *vector* source type that supports multiple layers.",
                                "editType": "plot"
                            },
                            "type": {
                                "valType": "enumerated",
                                "values": [
                                    "circle",
                                    "line",
                                    "fill",
                                    "symbol"
                                ],
                                "dflt": "circle",
                                "role": "info",
                                "description": "Sets the layer type. Support for *raster*, *background* types is coming soon. Note that *line* and *fill* are not compatible with Point GeoJSON geometries.",
                                "editType": "plot"
                            },
                            "below": {
                                "valType": "string",
                                "dflt": "",
                                "role": "info",
                                "description": "Determines if the layer will be inserted before the layer with the specified ID. If omitted or set to '', the layer will be inserted above every existing layer.",
                                "editType": "plot"
                            },
                            "color": {
                                "valType": "color",
                                "dflt": "#444",
                                "role": "style",
                                "description": "Sets the primary layer color. If `type` is *circle*, color corresponds to the circle color If `type` is *line*, color corresponds to the line color If `type` is *fill*, color corresponds to the fill color If `type` is *symbol*, color corresponds to the icon color",
                                "editType": "plot"
                            },
                            "opacity": {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "dflt": 1,
                                "role": "info",
                                "description": "Sets the opacity of the layer.",
                                "editType": "plot"
                            },
                            "circle": {
                                "radius": {
                                    "valType": "number",
                                    "dflt": 15,
                                    "role": "style",
                                    "description": "Sets the circle radius. Has an effect only when `type` is set to *circle*.",
                                    "editType": "plot"
                                },
                                "editType": "plot",
                                "role": "object"
                            },
                            "line": {
                                "width": {
                                    "valType": "number",
                                    "dflt": 2,
                                    "role": "style",
                                    "description": "Sets the line width. Has an effect only when `type` is set to *line*.",
                                    "editType": "plot"
                                },
                                "editType": "plot",
                                "role": "object"
                            },
                            "fill": {
                                "outlinecolor": {
                                    "valType": "color",
                                    "dflt": "#444",
                                    "role": "style",
                                    "description": "Sets the fill outline color. Has an effect only when `type` is set to *fill*.",
                                    "editType": "plot"
                                },
                                "editType": "plot",
                                "role": "object"
                            },
                            "symbol": {
                                "icon": {
                                    "valType": "string",
                                    "dflt": "marker",
                                    "role": "style",
                                    "description": "Sets the symbol icon image. Full list: https://www.mapbox.com/maki-icons/",
                                    "editType": "plot"
                                },
                                "iconsize": {
                                    "valType": "number",
                                    "dflt": 10,
                                    "role": "style",
                                    "description": "Sets the symbol icon size. Has an effect only when `type` is set to *symbol*.",
                                    "editType": "plot"
                                },
                                "text": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "info",
                                    "description": "Sets the symbol text.",
                                    "editType": "plot"
                                },
                                "textfont": {
                                    "family": {
                                        "valType": "string",
                                        "role": "style",
                                        "noBlank": true,
                                        "strict": true,
                                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                        "dflt": "Open Sans Regular, Arial Unicode MS Regular",
                                        "editType": "plot"
                                    },
                                    "size": {
                                        "valType": "number",
                                        "role": "style",
                                        "min": 1,
                                        "editType": "plot"
                                    },
                                    "color": {
                                        "valType": "color",
                                        "role": "style",
                                        "editType": "plot"
                                    },
                                    "description": "Sets the icon text font. Has an effect only when `type` is set to *symbol*.",
                                    "editType": "plot",
                                    "role": "object"
                                },
                                "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",
                                    "arrayOk": false,
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "Sets the positions of the `text` elements with respects to the (x,y) coordinates."
                                },
                                "editType": "plot",
                                "role": "object"
                            },
                            "name": {
                                "valType": "string",
                                "role": "style",
                                "editType": "plot",
                                "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."
                            },
                            "templateitemname": {
                                "valType": "string",
                                "role": "info",
                                "editType": "plot",
                                "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": "plot",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "editType": "plot",
                "_isSubplotObj": true,
                "role": "object"
            },
            "polar": {
                "domain": {
                    "x": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "plot",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the horizontal domain of this polar subplot (in plot fraction)."
                    },
                    "y": {
                        "valType": "info_array",
                        "role": "info",
                        "editType": "plot",
                        "items": [
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            },
                            {
                                "valType": "number",
                                "min": 0,
                                "max": 1,
                                "editType": "plot"
                            }
                        ],
                        "dflt": [
                            0,
                            1
                        ],
                        "description": "Sets the vertical domain of this polar subplot (in plot fraction)."
                    },
                    "editType": "plot",
                    "row": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "plot",
                        "description": "If there is a layout grid, use the domain for this row in the grid for this polar subplot ."
                    },
                    "column": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "info",
                        "editType": "plot",
                        "description": "If there is a layout grid, use the domain for this column in the grid for this polar subplot ."
                    },
                    "role": "object"
                },
                "sector": {
                    "valType": "info_array",
                    "items": [
                        {
                            "valType": "number",
                            "editType": "plot"
                        },
                        {
                            "valType": "number",
                            "editType": "plot"
                        }
                    ],
                    "dflt": [
                        0,
                        360
                    ],
                    "role": "info",
                    "editType": "plot",
                    "description": "Sets angular span of this polar subplot with two angles (in degrees). Sector are assumed to be spanned in the counterclockwise direction with *0* corresponding to rightmost limit of the polar subplot."
                },
                "hole": {
                    "valType": "number",
                    "min": 0,
                    "max": 1,
                    "dflt": 0,
                    "editType": "plot",
                    "role": "info",
                    "description": "Sets the fraction of the radius to cut out of the polar subplot."
                },
                "bgcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "plot",
                    "dflt": "#fff",
                    "description": "Set the background color of the subplot"
                },
                "radialaxis": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "plot",
                        "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false",
                        "dflt": true
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "-",
                            "linear",
                            "log",
                            "date",
                            "category"
                        ],
                        "dflt": "-",
                        "role": "info",
                        "editType": "calc",
                        "_noTemplating": true,
                        "description": "Sets the axis type. By default, plotly attempts to determined the axis type by looking into the data of the traces that referenced the axis in question."
                    },
                    "autorange": {
                        "valType": "enumerated",
                        "values": [
                            true,
                            false,
                            "reversed"
                        ],
                        "dflt": true,
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "description": "Determines whether or not the range of this axis is computed in relation to the input data. See `rangemode` for more info. If `range` is provided, then `autorange` is set to *false*."
                    },
                    "rangemode": {
                        "valType": "enumerated",
                        "values": [
                            "tozero",
                            "nonnegative",
                            "normal"
                        ],
                        "dflt": "tozero",
                        "role": "style",
                        "editType": "calc",
                        "description": "If *tozero*`, the range extends to 0, regardless of the input data If *nonnegative*, the range is non-negative, regardless of the input data. If *normal*, the range is computed in relation to the extrema of the input data (same behavior as for cartesian axes)."
                    },
                    "range": {
                        "valType": "info_array",
                        "role": "info",
                        "items": [
                            {
                                "valType": "any",
                                "editType": "plot",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            },
                            {
                                "valType": "any",
                                "editType": "plot",
                                "impliedEdits": {
                                    "^autorange": false
                                }
                            }
                        ],
                        "editType": "plot",
                        "impliedEdits": {
                            "autorange": false
                        },
                        "description": "Sets the range of this axis. If the axis `type` is *log*, then you must take the log of your desired range (e.g. to set the range from 1 to 100, set the range from 0 to 2). If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                    },
                    "categoryorder": {
                        "valType": "enumerated",
                        "values": [
                            "trace",
                            "category ascending",
                            "category descending",
                            "array"
                        ],
                        "dflt": "trace",
                        "role": "info",
                        "editType": "calc",
                        "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                    },
                    "categoryarray": {
                        "valType": "data_array",
                        "role": "data",
                        "editType": "calc",
                        "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                    },
                    "angle": {
                        "valType": "angle",
                        "editType": "plot",
                        "role": "info",
                        "description": "Sets the angle (in degrees) from which the radial axis is drawn. Note that by default, radial axis line on the theta=0 line corresponds to a line pointing right (like what mathematicians prefer). Defaults to the first `polar.sector` angle."
                    },
                    "side": {
                        "valType": "enumerated",
                        "values": [
                            "clockwise",
                            "counterclockwise"
                        ],
                        "dflt": "clockwise",
                        "editType": "plot",
                        "role": "info",
                        "description": "Determines on which side of radial axis line the tick and tick labels appear."
                    },
                    "title": {
                        "valType": "string",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the title of this axis.",
                        "dflt": ""
                    },
                    "titlefont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets this axis' title font.",
                        "role": "object"
                    },
                    "hoverformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "editType": "plot",
                    "color": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.",
                        "dflt": true
                    },
                    "gridcolor": {
                        "valType": "color",
                        "dflt": "#eee",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the grid lines."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label prefix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label suffix."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        }
                                    ],
                                    "editType": "plot",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "plot",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "plot",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "layer": {
                        "valType": "enumerated",
                        "values": [
                            "above traces",
                            "below traces"
                        ],
                        "dflt": "above traces",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the layer on which this axis is displayed. If *above traces*, this axis is displayed above all the subplot's traces If *below traces*, this axis is displayed below all the subplot's traces, but above the grid lines. Useful when used together with scatter-like traces with `cliponaxis` set to *false* to show markers and/or text nodes above this axis."
                    },
                    "calendar": {
                        "valType": "enumerated",
                        "values": [
                            "gregorian",
                            "chinese",
                            "coptic",
                            "discworld",
                            "ethiopian",
                            "hebrew",
                            "islamic",
                            "julian",
                            "mayan",
                            "nanakshahi",
                            "nepali",
                            "persian",
                            "jalali",
                            "taiwan",
                            "thai",
                            "ummalqura"
                        ],
                        "role": "info",
                        "editType": "calc",
                        "dflt": "gregorian",
                        "description": "Sets the calendar system to use for `range` and `tick0` if this is a date axis. This does not set the calendar for interpreting data on this axis, that's specified in the trace or via the global `layout.calendar`"
                    },
                    "role": "object",
                    "categoryarraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  categoryarray .",
                        "editType": "none"
                    },
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "angularaxis": {
                    "visible": {
                        "valType": "boolean",
                        "role": "info",
                        "editType": "plot",
                        "description": "A single toggle to hide the axis while preserving interaction like dragging. Default is true when a cheater plot is present on the axis, otherwise false",
                        "dflt": true
                    },
                    "type": {
                        "valType": "enumerated",
                        "values": [
                            "-",
                            "linear",
                            "category"
                        ],
                        "dflt": "-",
                        "role": "info",
                        "editType": "calc",
                        "_noTemplating": true,
                        "description": "Sets the angular axis type. If *linear*, set `thetaunit` to determine the unit in which axis value are shown. If *category, use `period` to set the number of integer coordinates around polar axis."
                    },
                    "categoryorder": {
                        "valType": "enumerated",
                        "values": [
                            "trace",
                            "category ascending",
                            "category descending",
                            "array"
                        ],
                        "dflt": "trace",
                        "role": "info",
                        "editType": "calc",
                        "description": "Specifies the ordering logic for the case of categorical variables. By default, plotly uses *trace*, which specifies the order that is present in the data supplied. Set `categoryorder` to *category ascending* or *category descending* if order should be determined by the alphanumerical order of the category names. Set `categoryorder` to *array* to derive the ordering from the attribute `categoryarray`. If a category is not found in the `categoryarray` array, the sorting behavior for that attribute will be identical to the *trace* mode. The unspecified categories will follow the categories in `categoryarray`."
                    },
                    "categoryarray": {
                        "valType": "data_array",
                        "role": "data",
                        "editType": "calc",
                        "description": "Sets the order in which categories on this axis appear. Only has an effect if `categoryorder` is set to *array*. Used with `categoryorder`."
                    },
                    "thetaunit": {
                        "valType": "enumerated",
                        "values": [
                            "radians",
                            "degrees"
                        ],
                        "dflt": "degrees",
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the format unit of the formatted *theta* values. Has an effect only when `angularaxis.type` is *linear*."
                    },
                    "period": {
                        "valType": "number",
                        "editType": "calc",
                        "min": 0,
                        "role": "info",
                        "description": "Set the angular period. Has an effect only when `angularaxis.type` is *category*."
                    },
                    "direction": {
                        "valType": "enumerated",
                        "values": [
                            "counterclockwise",
                            "clockwise"
                        ],
                        "dflt": "counterclockwise",
                        "role": "info",
                        "editType": "calc",
                        "description": "Sets the direction corresponding to positive angles."
                    },
                    "rotation": {
                        "valType": "angle",
                        "editType": "calc",
                        "role": "info",
                        "description": "Sets that start position (in degrees) of the angular axis By default, polar subplots with `direction` set to *counterclockwise* get a `rotation` of *0* which corresponds to due East (like what mathematicians prefer). In turn, polar with `direction` set to *clockwise* get a rotation of *90* which corresponds to due North (like on a compass),"
                    },
                    "hoverformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "none",
                        "description": "Sets the hover text formatting rule using d3 formatting mini-languages which are very similar to those in Python. For numbers, see: https://github.com/d3/d3-format/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "editType": "plot",
                    "color": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets default for all colors associated with this axis all at once: line, font, tick, and grid colors. Grid color is lightened by blending this with the plot background Individual pieces can override this."
                    },
                    "showline": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not a line bounding this axis is drawn."
                    },
                    "linecolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the axis line color."
                    },
                    "linewidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the axis line."
                    },
                    "showgrid": {
                        "valType": "boolean",
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not grid lines are drawn. If *true*, the grid lines are drawn at every tick mark.",
                        "dflt": true
                    },
                    "gridcolor": {
                        "valType": "color",
                        "dflt": "#eee",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the color of the grid lines."
                    },
                    "gridwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the width (in px) of the grid lines."
                    },
                    "tickmode": {
                        "valType": "enumerated",
                        "values": [
                            "auto",
                            "linear",
                            "array"
                        ],
                        "role": "info",
                        "editType": "plot",
                        "impliedEdits": {},
                        "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)."
                    },
                    "nticks": {
                        "valType": "integer",
                        "min": 0,
                        "dflt": 0,
                        "role": "style",
                        "editType": "plot",
                        "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*."
                    },
                    "tick0": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>* (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."
                    },
                    "dtick": {
                        "valType": "any",
                        "role": "style",
                        "editType": "plot",
                        "impliedEdits": {
                            "tickmode": "linear"
                        },
                        "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<f>*, 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<n>* 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*"
                    },
                    "tickvals": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the values at which ticks on this axis appear. Only has an effect if `tickmode` is set to *array*. Used with `ticktext`.",
                        "role": "data"
                    },
                    "ticktext": {
                        "valType": "data_array",
                        "editType": "plot",
                        "description": "Sets the text displayed at the ticks position via `tickvals`. Only has an effect if `tickmode` is set to *array*. Used with `tickvals`.",
                        "role": "data"
                    },
                    "ticks": {
                        "valType": "enumerated",
                        "values": [
                            "outside",
                            "inside",
                            ""
                        ],
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "ticklen": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 5,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick length (in px)."
                    },
                    "tickwidth": {
                        "valType": "number",
                        "min": 0,
                        "dflt": 1,
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick width (in px)."
                    },
                    "tickcolor": {
                        "valType": "color",
                        "dflt": "#444",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the tick color."
                    },
                    "showticklabels": {
                        "valType": "boolean",
                        "dflt": true,
                        "role": "style",
                        "editType": "plot",
                        "description": "Determines whether or not the tick labels are drawn."
                    },
                    "showtickprefix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "tickprefix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label prefix."
                    },
                    "showticksuffix": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "description": "Same as `showtickprefix` but for tick suffixes."
                    },
                    "ticksuffix": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets a tick label suffix."
                    },
                    "showexponent": {
                        "valType": "enumerated",
                        "values": [
                            "all",
                            "first",
                            "last",
                            "none"
                        ],
                        "dflt": "all",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "exponentformat": {
                        "valType": "enumerated",
                        "values": [
                            "none",
                            "e",
                            "E",
                            "power",
                            "SI",
                            "B"
                        ],
                        "dflt": "B",
                        "role": "style",
                        "editType": "plot",
                        "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."
                    },
                    "separatethousands": {
                        "valType": "boolean",
                        "dflt": false,
                        "role": "style",
                        "editType": "plot",
                        "description": "If \"true\", even 4-digit integers are separated"
                    },
                    "tickfont": {
                        "family": {
                            "valType": "string",
                            "role": "style",
                            "noBlank": true,
                            "strict": true,
                            "editType": "plot",
                            "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                        },
                        "size": {
                            "valType": "number",
                            "role": "style",
                            "min": 1,
                            "editType": "plot"
                        },
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "plot"
                        },
                        "editType": "plot",
                        "description": "Sets the tick font.",
                        "role": "object"
                    },
                    "tickangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "style",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the horizontal. For example, a `tickangle` of -90 draws the tick labels vertically."
                    },
                    "tickformat": {
                        "valType": "string",
                        "dflt": "",
                        "role": "style",
                        "editType": "plot",
                        "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/blob/master/README.md#locale_format And for dates see: https://github.com/d3/d3-time-format/blob/master/README.md#locale_format We add one item to d3's date formatter: *%{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*"
                    },
                    "tickformatstops": {
                        "items": {
                            "tickformatstop": {
                                "enabled": {
                                    "valType": "boolean",
                                    "role": "info",
                                    "dflt": true,
                                    "editType": "plot",
                                    "description": "Determines whether or not this stop is used. If `false`, this stop is ignored even within its `dtickrange`."
                                },
                                "dtickrange": {
                                    "valType": "info_array",
                                    "role": "info",
                                    "items": [
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        },
                                        {
                                            "valType": "any",
                                            "editType": "plot"
                                        }
                                    ],
                                    "editType": "plot",
                                    "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*"
                                },
                                "value": {
                                    "valType": "string",
                                    "dflt": "",
                                    "role": "style",
                                    "editType": "plot",
                                    "description": "string - dtickformat for described zoom level, the same as *tickformat*"
                                },
                                "editType": "plot",
                                "name": {
                                    "valType": "string",
                                    "role": "style",
                                    "editType": "plot",
                                    "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."
                                },
                                "templateitemname": {
                                    "valType": "string",
                                    "role": "info",
                                    "editType": "plot",
                                    "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`."
                                },
                                "role": "object"
                            }
                        },
                        "role": "object"
                    },
                    "layer": {
                        "valType": "enumerated",
                        "values": [
                            "above traces",
                            "below traces"
                        ],
                        "dflt": "above traces",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the layer on which this axis is displayed. If *above traces*, this axis is displayed above all the subplot's traces If *below traces*, this axis is displayed below all the subplot's traces, but above the grid lines. Useful when used together with scatter-like traces with `cliponaxis` set to *false* to show markers and/or text nodes above this axis."
                    },
                    "role": "object",
                    "categoryarraysrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  categoryarray .",
                        "editType": "none"
                    },
                    "tickvalssrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  tickvals .",
                        "editType": "none"
                    },
                    "ticktextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  ticktext .",
                        "editType": "none"
                    }
                },
                "gridshape": {
                    "valType": "enumerated",
                    "values": [
                        "circular",
                        "linear"
                    ],
                    "dflt": "circular",
                    "role": "style",
                    "editType": "plot",
                    "description": "Determines if the radial axis grid lines and angular axis line are drawn as *circular* sectors or as *linear* (polygon) sectors. Has an effect only when the angular axis has `type` *category*. Note that `radialaxis.angle` is snapped to the angle of the closest vertex when `gridshape` is *circular* (so that radial axis scale is the same as the data scale)."
                },
                "editType": "calc",
                "_isSubplotObj": true,
                "role": "object"
            },
            "radialaxis": {
                "range": {
                    "valType": "info_array",
                    "role": "info",
                    "items": [
                        {
                            "valType": "number",
                            "editType": "plot"
                        },
                        {
                            "valType": "number",
                            "editType": "plot"
                        }
                    ],
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Defines the start and end point of this radial axis.",
                    "editType": "plot"
                },
                "domain": {
                    "valType": "info_array",
                    "role": "info",
                    "items": [
                        {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "editType": "plot"
                        },
                        {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "editType": "plot"
                        }
                    ],
                    "dflt": [
                        0,
                        1
                    ],
                    "editType": "plot",
                    "description": "Polar chart subplots are not supported yet. This key has currently no effect."
                },
                "orientation": {
                    "valType": "number",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the orientation (an angle with respect to the origin) of the radial axis.",
                    "editType": "plot"
                },
                "showline": {
                    "valType": "boolean",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Determines whether or not the line bounding this radial axis will be shown on the figure.",
                    "editType": "plot"
                },
                "showticklabels": {
                    "valType": "boolean",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Determines whether or not the radial axis ticks will feature tick labels.",
                    "editType": "plot"
                },
                "tickorientation": {
                    "valType": "enumerated",
                    "values": [
                        "horizontal",
                        "vertical"
                    ],
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the orientation (from the paper perspective) of the radial axis tick labels.",
                    "editType": "plot"
                },
                "ticklen": {
                    "valType": "number",
                    "min": 0,
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the length of the tick lines on this radial axis.",
                    "editType": "plot"
                },
                "tickcolor": {
                    "valType": "color",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the color of the tick lines on this radial axis.",
                    "editType": "plot"
                },
                "ticksuffix": {
                    "valType": "string",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the length of the tick lines on this radial axis.",
                    "editType": "plot"
                },
                "endpadding": {
                    "valType": "number",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots.",
                    "editType": "plot"
                },
                "visible": {
                    "valType": "boolean",
                    "role": "info",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Determines whether or not this axis will be visible.",
                    "editType": "plot"
                },
                "editType": "plot",
                "role": "object"
            },
            "angularaxis": {
                "range": {
                    "valType": "info_array",
                    "role": "info",
                    "items": [
                        {
                            "valType": "number",
                            "dflt": 0,
                            "editType": "plot"
                        },
                        {
                            "valType": "number",
                            "dflt": 360,
                            "editType": "plot"
                        }
                    ],
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Defines the start and end point of this angular axis.",
                    "editType": "plot"
                },
                "domain": {
                    "valType": "info_array",
                    "role": "info",
                    "items": [
                        {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "editType": "plot"
                        },
                        {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "editType": "plot"
                        }
                    ],
                    "dflt": [
                        0,
                        1
                    ],
                    "editType": "plot",
                    "description": "Polar chart subplots are not supported yet. This key has currently no effect."
                },
                "showline": {
                    "valType": "boolean",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Determines whether or not the line bounding this angular axis will be shown on the figure.",
                    "editType": "plot"
                },
                "showticklabels": {
                    "valType": "boolean",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Determines whether or not the angular axis ticks will feature tick labels.",
                    "editType": "plot"
                },
                "tickorientation": {
                    "valType": "enumerated",
                    "values": [
                        "horizontal",
                        "vertical"
                    ],
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the orientation (from the paper perspective) of the angular axis tick labels.",
                    "editType": "plot"
                },
                "ticklen": {
                    "valType": "number",
                    "min": 0,
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the length of the tick lines on this angular axis.",
                    "editType": "plot"
                },
                "tickcolor": {
                    "valType": "color",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the color of the tick lines on this angular axis.",
                    "editType": "plot"
                },
                "ticksuffix": {
                    "valType": "string",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the length of the tick lines on this angular axis.",
                    "editType": "plot"
                },
                "endpadding": {
                    "valType": "number",
                    "role": "style",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots.",
                    "editType": "plot"
                },
                "visible": {
                    "valType": "boolean",
                    "role": "info",
                    "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Determines whether or not this axis will be visible.",
                    "editType": "plot"
                },
                "editType": "plot",
                "role": "object"
            },
            "direction": {
                "valType": "enumerated",
                "values": [
                    "clockwise",
                    "counterclockwise"
                ],
                "role": "info",
                "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Sets the direction corresponding to positive angles in legacy polar charts.",
                "editType": "plot"
            },
            "orientation": {
                "valType": "angle",
                "role": "info",
                "description": "Legacy polar charts are deprecated! Please switch to *polar* subplots. Rotates the entire polar by the given angle in legacy polar charts.",
                "editType": "plot"
            },
            "editType": "plot",
            "legend": {
                "bgcolor": {
                    "valType": "color",
                    "role": "style",
                    "editType": "legend",
                    "description": "Sets the legend background color."
                },
                "bordercolor": {
                    "valType": "color",
                    "dflt": "#444",
                    "role": "style",
                    "editType": "legend",
                    "description": "Sets the color of the border enclosing the legend."
                },
                "borderwidth": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 0,
                    "role": "style",
                    "editType": "legend",
                    "description": "Sets the width (in px) of the border enclosing the legend."
                },
                "font": {
                    "family": {
                        "valType": "string",
                        "role": "style",
                        "noBlank": true,
                        "strict": true,
                        "editType": "legend",
                        "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                    },
                    "size": {
                        "valType": "number",
                        "role": "style",
                        "min": 1,
                        "editType": "legend"
                    },
                    "color": {
                        "valType": "color",
                        "role": "style",
                        "editType": "legend"
                    },
                    "editType": "legend",
                    "description": "Sets the font used to text the legend items.",
                    "role": "object"
                },
                "orientation": {
                    "valType": "enumerated",
                    "values": [
                        "v",
                        "h"
                    ],
                    "dflt": "v",
                    "role": "info",
                    "editType": "legend",
                    "description": "Sets the orientation of the legend."
                },
                "traceorder": {
                    "valType": "flaglist",
                    "flags": [
                        "reversed",
                        "grouped"
                    ],
                    "extras": [
                        "normal"
                    ],
                    "role": "style",
                    "editType": "legend",
                    "description": "Determines the order at which the legend items are displayed. If *normal*, the items are displayed top-to-bottom in the same order as the input data. If *reversed*, the items are displayed in the opposite order as *normal*. If *grouped*, the items are displayed in groups (when a trace `legendgroup` is provided). if *grouped+reversed*, the items are displayed in the opposite order as *grouped*."
                },
                "tracegroupgap": {
                    "valType": "number",
                    "min": 0,
                    "dflt": 10,
                    "role": "style",
                    "editType": "legend",
                    "description": "Sets the amount of vertical space (in px) between legend groups."
                },
                "x": {
                    "valType": "number",
                    "min": -2,
                    "max": 3,
                    "dflt": 1.02,
                    "role": "style",
                    "editType": "legend",
                    "description": "Sets the x position (in normalized coordinates) of the legend."
                },
                "xanchor": {
                    "valType": "enumerated",
                    "values": [
                        "auto",
                        "left",
                        "center",
                        "right"
                    ],
                    "dflt": "left",
                    "role": "info",
                    "editType": "legend",
                    "description": "Sets the legend's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the legend."
                },
                "y": {
                    "valType": "number",
                    "min": -2,
                    "max": 3,
                    "dflt": 1,
                    "role": "style",
                    "editType": "legend",
                    "description": "Sets the y position (in normalized coordinates) of the legend."
                },
                "yanchor": {
                    "valType": "enumerated",
                    "values": [
                        "auto",
                        "top",
                        "middle",
                        "bottom"
                    ],
                    "dflt": "auto",
                    "role": "info",
                    "editType": "legend",
                    "description": "Sets the legend's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the legend."
                },
                "editType": "legend",
                "role": "object"
            },
            "annotations": {
                "items": {
                    "annotation": {
                        "visible": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc+arraydraw",
                            "description": "Determines whether or not this annotation is visible."
                        },
                        "text": {
                            "valType": "string",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the text associated with this annotation. Plotly uses a subset of HTML tags to do things like newline (<br>), bold (<b></b>), italics (<i></i>), hyperlinks (<a href='...'></a>). Tags <em>, <sup>, <sub> <span> are also supported."
                        },
                        "textangle": {
                            "valType": "angle",
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets the angle at which the `text` is drawn with respect to the horizontal."
                        },
                        "font": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "editType": "calc+arraydraw",
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "calc+arraydraw"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "arraydraw"
                            },
                            "editType": "calc+arraydraw",
                            "description": "Sets the annotation text font.",
                            "role": "object"
                        },
                        "width": {
                            "valType": "number",
                            "min": 1,
                            "dflt": null,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets an explicit width for the text box. null (default) lets the text set the box width. Wider text will be clipped. There is no automatic wrapping; use <br> to start a new line."
                        },
                        "height": {
                            "valType": "number",
                            "min": 1,
                            "dflt": null,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets an explicit height for the text box. null (default) lets the text set the box height. Taller text will be clipped."
                        },
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "dflt": 1,
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the opacity of the annotation (text + arrow)."
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "center",
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the horizontal alignment of the `text` within the box. Has an effect only if `text` spans more two or more lines (i.e. `text` contains one or more <br> HTML tags) or if an explicit width is set to override the text width."
                        },
                        "valign": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "dflt": "middle",
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the vertical alignment of the `text` within the box. Has an effect only if an explicit height is set to override the text height."
                        },
                        "bgcolor": {
                            "valType": "color",
                            "dflt": "rgba(0,0,0,0)",
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the background color of the annotation."
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "rgba(0,0,0,0)",
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the color of the border enclosing the annotation `text`."
                        },
                        "borderpad": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets the padding (in px) between the `text` and the enclosing border."
                        },
                        "borderwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets the width (in px) of the border enclosing the annotation `text`."
                        },
                        "showarrow": {
                            "valType": "boolean",
                            "dflt": true,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Determines whether or not the annotation is drawn with an arrow. If *true*, `text` is placed near the arrow's tail. If *false*, `text` lines up with the `x` and `y` provided."
                        },
                        "arrowcolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the color of the annotation arrow."
                        },
                        "arrowhead": {
                            "valType": "integer",
                            "min": 0,
                            "max": 8,
                            "dflt": 1,
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the end annotation arrow head style."
                        },
                        "startarrowhead": {
                            "valType": "integer",
                            "min": 0,
                            "max": 8,
                            "dflt": 1,
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the start annotation arrow head style."
                        },
                        "arrowside": {
                            "valType": "flaglist",
                            "flags": [
                                "end",
                                "start"
                            ],
                            "extras": [
                                "none"
                            ],
                            "dflt": "end",
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the annotation arrow head position."
                        },
                        "arrowsize": {
                            "valType": "number",
                            "min": 0.3,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets the size of the end annotation arrow head, relative to `arrowwidth`. A value of 1 (default) gives a head about 3x as wide as the line."
                        },
                        "startarrowsize": {
                            "valType": "number",
                            "min": 0.3,
                            "dflt": 1,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets the size of the start annotation arrow head, relative to `arrowwidth`. A value of 1 (default) gives a head about 3x as wide as the line."
                        },
                        "arrowwidth": {
                            "valType": "number",
                            "min": 0.1,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets the width (in px) of annotation arrow line."
                        },
                        "standoff": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets a distance, in pixels, to move the end arrowhead away from the position it is pointing at, for example to point at the edge of a marker independent of zoom. Note that this shortens the arrow from the `ax` / `ay` vector, in contrast to `xshift` / `yshift` which moves everything by this amount."
                        },
                        "startstandoff": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Sets a distance, in pixels, to move the start arrowhead away from the position it is pointing at, for example to point at the edge of a marker independent of zoom. Note that this shortens the arrow from the `ax` / `ay` vector, in contrast to `xshift` / `yshift` which moves everything by this amount."
                        },
                        "ax": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the x component of the arrow tail about the arrow head. If `axref` is `pixel`, a positive (negative)  component corresponds to an arrow pointing from right to left (left to right). If `axref` is an axis, this is an absolute value on that axis, like `x`, NOT a relative value."
                        },
                        "ay": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the y component of the arrow tail about the arrow head. If `ayref` is `pixel`, a positive (negative)  component corresponds to an arrow pointing from bottom to top (top to bottom). If `ayref` is an axis, this is an absolute value on that axis, like `y`, NOT a relative value."
                        },
                        "axref": {
                            "valType": "enumerated",
                            "dflt": "pixel",
                            "values": [
                                "pixel",
                                "/^x([2-9]|[1-9][0-9]+)?$/"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "description": "Indicates in what terms the tail of the annotation (ax,ay)  is specified. If `pixel`, `ax` is a relative offset in pixels  from `x`. If set to an x axis id (e.g. *x* or *x2*), `ax` is  specified in the same terms as that axis. This is useful  for trendline annotations which should continue to indicate  the correct trend when zoomed."
                        },
                        "ayref": {
                            "valType": "enumerated",
                            "dflt": "pixel",
                            "values": [
                                "pixel",
                                "/^y([2-9]|[1-9][0-9]+)?$/"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "description": "Indicates in what terms the tail of the annotation (ax,ay)  is specified. If `pixel`, `ay` is a relative offset in pixels  from `y`. If set to a y axis id (e.g. *y* or *y2*), `ay` is  specified in the same terms as that axis. This is useful  for trendline annotations which should continue to indicate  the correct trend when zoomed."
                        },
                        "xref": {
                            "valType": "enumerated",
                            "values": [
                                "paper",
                                "/^x([2-9]|[1-9][0-9]+)?$/"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "description": "Sets the annotation's x coordinate axis. If set to an x axis id (e.g. *x* or *x2*), the `x` position refers to an x coordinate If set to *paper*, the `x` position refers to the distance from the left side of the plotting area in normalized coordinates where 0 (1) corresponds to the left (right) side."
                        },
                        "x": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the annotation's x position. If the axis `type` is *log*, then you must take the log of your desired range. If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "auto",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the text box's horizontal position anchor This anchor binds the `x` position to the *left*, *center* or *right* of the annotation. For example, if `x` is set to 1, `xref` to *paper* and `xanchor` to *right* then the right-most portion of the annotation lines up with the right-most edge of the plotting area. If *auto*, the anchor is equivalent to *center* for data-referenced annotations or if there is an arrow, whereas for paper-referenced with no arrow, the anchor picked corresponds to the closest side."
                        },
                        "xshift": {
                            "valType": "number",
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Shifts the position of the whole annotation and arrow to the right (positive) or left (negative) by this many pixels."
                        },
                        "yref": {
                            "valType": "enumerated",
                            "values": [
                                "paper",
                                "/^y([2-9]|[1-9][0-9]+)?$/"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "description": "Sets the annotation's y coordinate axis. If set to an y axis id (e.g. *y* or *y2*), the `y` position refers to an y coordinate If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where 0 (1) corresponds to the bottom (top)."
                        },
                        "y": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the annotation's y position. If the axis `type` is *log*, then you must take the log of your desired range. If the axis `type` is *date*, it should be date strings, like date data, though Date objects and unix milliseconds will be accepted and converted to strings. If the axis `type` is *category*, it should be numbers, using the scale where each category is assigned a serial number from zero in the order it appears."
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "dflt": "auto",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the text box's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the annotation. For example, if `y` is set to 1, `yref` to *paper* and `yanchor` to *top* then the top-most portion of the annotation lines up with the top-most edge of the plotting area. If *auto*, the anchor is equivalent to *middle* for data-referenced annotations or if there is an arrow, whereas for paper-referenced with no arrow, the anchor picked corresponds to the closest side."
                        },
                        "yshift": {
                            "valType": "number",
                            "dflt": 0,
                            "role": "style",
                            "editType": "calc+arraydraw",
                            "description": "Shifts the position of the whole annotation and arrow up (positive) or down (negative) by this many pixels."
                        },
                        "clicktoshow": {
                            "valType": "enumerated",
                            "values": [
                                false,
                                "onoff",
                                "onout"
                            ],
                            "dflt": false,
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Makes this annotation respond to clicks on the plot. If you click a data point that exactly matches the `x` and `y` values of this annotation, and it is hidden (visible: false), it will appear. In *onoff* mode, you must click the same point again to make it disappear, so if you click multiple points, you can show multiple annotations. In *onout* mode, a click anywhere else in the plot (on another data point or not) will hide this annotation. If you need to show/hide this annotation in response to different `x` or `y` values, you can set `xclick` and/or `yclick`. This is useful for example to label the side of a bar. To label markers though, `standoff` is preferred over `xclick` and `yclick`."
                        },
                        "xclick": {
                            "valType": "any",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Toggle this annotation when clicking a data point whose `x` value is `xclick` rather than the annotation's `x` value."
                        },
                        "yclick": {
                            "valType": "any",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Toggle this annotation when clicking a data point whose `y` value is `yclick` rather than the annotation's `y` value."
                        },
                        "hovertext": {
                            "valType": "string",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Sets text to appear when hovering over this annotation. If omitted or blank, no hover label will appear."
                        },
                        "hoverlabel": {
                            "bgcolor": {
                                "valType": "color",
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "Sets the background color of the hover label. By default uses the annotation's `bgcolor` made opaque, or white if it was transparent."
                            },
                            "bordercolor": {
                                "valType": "color",
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "Sets the border color of the hover label. By default uses either dark grey or white, for maximum contrast with `hoverlabel.bgcolor`."
                            },
                            "font": {
                                "family": {
                                    "valType": "string",
                                    "role": "style",
                                    "noBlank": true,
                                    "strict": true,
                                    "editType": "arraydraw",
                                    "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*."
                                },
                                "size": {
                                    "valType": "number",
                                    "role": "style",
                                    "min": 1,
                                    "editType": "arraydraw"
                                },
                                "color": {
                                    "valType": "color",
                                    "role": "style",
                                    "editType": "arraydraw"
                                },
                                "editType": "arraydraw",
                                "description": "Sets the hover label text font. By default uses the global hover font and size, with color from `hoverlabel.bordercolor`.",
                                "role": "object"
                            },
                            "editType": "arraydraw",
                            "role": "object"
                        },
                        "captureevents": {
                            "valType": "boolean",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Determines whether the annotation text box captures mouse move and click events, or allows those events to pass through to data points in the plot that may be behind the annotation. By default `captureevents` is *false* unless `hovertext` is provided. If you use the event `plotly_clickannotation` without `hovertext` you must explicitly enable `captureevents`."
                        },
                        "editType": "calc",
                        "_deprecated": {
                            "ref": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "description": "Obsolete. Set `xref` and `yref` separately instead."
                            }
                        },
                        "name": {
                            "valType": "string",
                            "role": "style",
                            "editType": "none",
                            "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."
                        },
                        "templateitemname": {
                            "valType": "string",
                            "role": "info",
                            "editType": "calc",
                            "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`."
                        },
                        "role": "object"
                    }
                },
                "role": "object"
            },
            "shapes": {
                "items": {
                    "shape": {
                        "visible": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "calc+arraydraw",
                            "description": "Determines whether or not this shape is visible."
                        },
                        "type": {
                            "valType": "enumerated",
                            "values": [
                                "circle",
                                "rect",
                                "path",
                                "line"
                            ],
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Specifies the shape type to be drawn. If *line*, a line is drawn from (`x0`,`y0`) to (`x1`,`y1`) with respect to the axes' sizing mode. If *circle*, a circle is drawn from ((`x0`+`x1`)/2, (`y0`+`y1`)/2)) with radius (|(`x0`+`x1`)/2 - `x0`|, |(`y0`+`y1`)/2 -`y0`)|) with respect to the axes' sizing mode. If *rect*, a rectangle is drawn linking (`x0`,`y0`), (`x1`,`y0`), (`x1`,`y1`), (`x0`,`y1`), (`x0`,`y0`) with respect to the axes' sizing mode. If *path*, draw a custom SVG path using `path`. with respect to the axes' sizing mode."
                        },
                        "layer": {
                            "valType": "enumerated",
                            "values": [
                                "below",
                                "above"
                            ],
                            "dflt": "above",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Specifies whether shapes are drawn below or above traces."
                        },
                        "xref": {
                            "valType": "enumerated",
                            "values": [
                                "paper",
                                "/^x([2-9]|[1-9][0-9]+)?$/"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "description": "Sets the shape's x coordinate axis. If set to an x axis id (e.g. *x* or *x2*), the `x` position refers to an x coordinate. If set to *paper*, the `x` position refers to the distance from the left side of the plotting area in normalized coordinates where *0* (*1*) corresponds to the left (right) side. If the axis `type` is *log*, then you must take the log of your desired range. If the axis `type` is *date*, then you must convert the date to unix time in milliseconds."
                        },
                        "xsizemode": {
                            "valType": "enumerated",
                            "values": [
                                "scaled",
                                "pixel"
                            ],
                            "dflt": "scaled",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the shapes's sizing mode along the x axis. If set to *scaled*, `x0`, `x1` and x coordinates within `path` refer to data values on the x axis or a fraction of the plot area's width (`xref` set to *paper*). If set to *pixel*, `xanchor` specifies the x position in terms of data or plot fraction but `x0`, `x1` and x coordinates within `path` are pixels relative to `xanchor`. This way, the shape can have a fixed width while maintaining a position relative to data or plot fraction."
                        },
                        "xanchor": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Only relevant in conjunction with `xsizemode` set to *pixel*. Specifies the anchor point on the x axis to which `x0`, `x1` and x coordinates within `path` are relative to. E.g. useful to attach a pixel sized shape to a certain data value. No effect when `xsizemode` not set to *pixel*."
                        },
                        "x0": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the shape's starting x position. See `type` and `xsizemode` for more info."
                        },
                        "x1": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the shape's end x position. See `type` and `xsizemode` for more info."
                        },
                        "yref": {
                            "valType": "enumerated",
                            "values": [
                                "paper",
                                "/^y([2-9]|[1-9][0-9]+)?$/"
                            ],
                            "role": "info",
                            "editType": "calc",
                            "description": "Sets the annotation's y coordinate axis. If set to an y axis id (e.g. *y* or *y2*), the `y` position refers to an y coordinate If set to *paper*, the `y` position refers to the distance from the bottom of the plotting area in normalized coordinates where *0* (*1*) corresponds to the bottom (top)."
                        },
                        "ysizemode": {
                            "valType": "enumerated",
                            "values": [
                                "scaled",
                                "pixel"
                            ],
                            "dflt": "scaled",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the shapes's sizing mode along the y axis. If set to *scaled*, `y0`, `y1` and y coordinates within `path` refer to data values on the y axis or a fraction of the plot area's height (`yref` set to *paper*). If set to *pixel*, `yanchor` specifies the y position in terms of data or plot fraction but `y0`, `y1` and y coordinates within `path` are pixels relative to `yanchor`. This way, the shape can have a fixed height while maintaining a position relative to data or plot fraction."
                        },
                        "yanchor": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Only relevant in conjunction with `ysizemode` set to *pixel*. Specifies the anchor point on the y axis to which `y0`, `y1` and y coordinates within `path` are relative to. E.g. useful to attach a pixel sized shape to a certain data value. No effect when `ysizemode` not set to *pixel*."
                        },
                        "y0": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the shape's starting y position. See `type` and `ysizemode` for more info."
                        },
                        "y1": {
                            "valType": "any",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "Sets the shape's end y position. See `type` and `ysizemode` for more info."
                        },
                        "path": {
                            "valType": "string",
                            "role": "info",
                            "editType": "calc+arraydraw",
                            "description": "For `type` *path* - a valid SVG path with the pixel values replaced by data values in `xsizemode`/`ysizemode` being *scaled* and taken unmodified as pixels relative to `xanchor` and `yanchor` in case of *pixel* size mode. There are a few restrictions / quirks only absolute instructions, not relative. So the allowed segments are: M, L, H, V, Q, C, T, S, and Z arcs (A) are not allowed because radius rx and ry are relative. In the future we could consider supporting relative commands, but we would have to decide on how to handle date and log axes. Note that even as is, Q and C Bezier paths that are smooth on linear axes may not be smooth on log, and vice versa. no chained \"polybezier\" commands - specify the segment type for each one. On category axes, values are numbers scaled to the serial numbers of categories because using the categories themselves there would be no way to describe fractional positions On data axes: because space and T are both normal components of path strings, we can't use either to separate date from time parts. Therefore we'll use underscore for this purpose: 2015-02-21_13:45:56.789"
                        },
                        "opacity": {
                            "valType": "number",
                            "min": 0,
                            "max": 1,
                            "dflt": 1,
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Sets the opacity of the shape."
                        },
                        "line": {
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "Sets the line color."
                            },
                            "width": {
                                "valType": "number",
                                "min": 0,
                                "dflt": 2,
                                "role": "style",
                                "editType": "calc+arraydraw",
                                "description": "Sets the line width (in px)."
                            },
                            "dash": {
                                "valType": "string",
                                "values": [
                                    "solid",
                                    "dot",
                                    "dash",
                                    "longdash",
                                    "dashdot",
                                    "longdashdot"
                                ],
                                "dflt": "solid",
                                "role": "style",
                                "editType": "arraydraw",
                                "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*)."
                            },
                            "role": "object",
                            "editType": "calc+arraydraw"
                        },
                        "fillcolor": {
                            "valType": "color",
                            "dflt": "rgba(0,0,0,0)",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Sets the color filling the shape's interior."
                        },
                        "editType": "arraydraw",
                        "name": {
                            "valType": "string",
                            "role": "style",
                            "editType": "none",
                            "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."
                        },
                        "templateitemname": {
                            "valType": "string",
                            "role": "info",
                            "editType": "calc",
                            "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`."
                        },
                        "role": "object"
                    }
                },
                "role": "object"
            },
            "images": {
                "items": {
                    "image": {
                        "visible": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "editType": "arraydraw",
                            "description": "Determines whether or not this image is visible."
                        },
                        "source": {
                            "valType": "string",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Specifies the URL of the image to be used. The URL must be accessible from the domain where the plot code is run, and can be either relative or absolute."
                        },
                        "layer": {
                            "valType": "enumerated",
                            "values": [
                                "below",
                                "above"
                            ],
                            "dflt": "above",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Specifies whether images are drawn below or above traces. When `xref` and `yref` are both set to `paper`, image is drawn below the entire plot area."
                        },
                        "sizex": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 0,
                            "editType": "arraydraw",
                            "description": "Sets the image container size horizontally. The image will be sized based on the `position` value. When `xref` is set to `paper`, units are sized relative to the plot width."
                        },
                        "sizey": {
                            "valType": "number",
                            "role": "info",
                            "dflt": 0,
                            "editType": "arraydraw",
                            "description": "Sets the image container size vertically. The image will be sized based on the `position` value. When `yref` is set to `paper`, units are sized relative to the plot height."
                        },
                        "sizing": {
                            "valType": "enumerated",
                            "values": [
                                "fill",
                                "contain",
                                "stretch"
                            ],
                            "dflt": "contain",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Specifies which dimension of the image to constrain."
                        },
                        "opacity": {
                            "valType": "number",
                            "role": "info",
                            "min": 0,
                            "max": 1,
                            "dflt": 1,
                            "editType": "arraydraw",
                            "description": "Sets the opacity of the image."
                        },
                        "x": {
                            "valType": "any",
                            "role": "info",
                            "dflt": 0,
                            "editType": "arraydraw",
                            "description": "Sets the image's x position. When `xref` is set to `paper`, units are sized relative to the plot height. See `xref` for more info"
                        },
                        "y": {
                            "valType": "any",
                            "role": "info",
                            "dflt": 0,
                            "editType": "arraydraw",
                            "description": "Sets the image's y position. When `yref` is set to `paper`, units are sized relative to the plot height. See `yref` for more info"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Sets the anchor for the x position"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "dflt": "top",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Sets the anchor for the y position."
                        },
                        "xref": {
                            "valType": "enumerated",
                            "values": [
                                "paper",
                                "/^x([2-9]|[1-9][0-9]+)?$/"
                            ],
                            "dflt": "paper",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Sets the images's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to an x data coordinate If set to *paper*, the `x` position refers to the distance from the left of plot in normalized coordinates where *0* (*1*) corresponds to the left (right)."
                        },
                        "yref": {
                            "valType": "enumerated",
                            "values": [
                                "paper",
                                "/^y([2-9]|[1-9][0-9]+)?$/"
                            ],
                            "dflt": "paper",
                            "role": "info",
                            "editType": "arraydraw",
                            "description": "Sets the images's y coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y data coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plot in normalized coordinates where *0* (*1*) corresponds to the bottom (top)."
                        },
                        "editType": "arraydraw",
                        "name": {
                            "valType": "string",
                            "role": "style",
                            "editType": "none",
                            "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."
                        },
                        "templateitemname": {
                            "valType": "string",
                            "role": "info",
                            "editType": "calc",
                            "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`."
                        },
                        "role": "object"
                    }
                },
                "role": "object"
            },
            "updatemenus": {
                "items": {
                    "updatemenu": {
                        "_arrayAttrRegexps": [
                            {}
                        ],
                        "visible": {
                            "valType": "boolean",
                            "role": "info",
                            "description": "Determines whether or not the update menu is visible.",
                            "editType": "arraydraw"
                        },
                        "type": {
                            "valType": "enumerated",
                            "values": [
                                "dropdown",
                                "buttons"
                            ],
                            "dflt": "dropdown",
                            "role": "info",
                            "description": "Determines whether the buttons are accessible via a dropdown menu or whether the buttons are stacked horizontally or vertically",
                            "editType": "arraydraw"
                        },
                        "direction": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "up",
                                "down"
                            ],
                            "dflt": "down",
                            "role": "info",
                            "description": "Determines the direction in which the buttons are laid out, whether in a dropdown menu or a row/column of buttons. For `left` and `up`, the buttons will still appear in left-to-right or top-to-bottom order respectively.",
                            "editType": "arraydraw"
                        },
                        "active": {
                            "valType": "integer",
                            "role": "info",
                            "min": -1,
                            "dflt": 0,
                            "description": "Determines which button (by index starting from 0) is considered active.",
                            "editType": "arraydraw"
                        },
                        "showactive": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "description": "Highlights active dropdown item or active button if true.",
                            "editType": "arraydraw"
                        },
                        "buttons": {
                            "items": {
                                "button": {
                                    "visible": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "description": "Determines whether or not this button is visible.",
                                        "editType": "arraydraw"
                                    },
                                    "method": {
                                        "valType": "enumerated",
                                        "values": [
                                            "restyle",
                                            "relayout",
                                            "animate",
                                            "update",
                                            "skip"
                                        ],
                                        "dflt": "restyle",
                                        "role": "info",
                                        "description": "Sets the Plotly method to be called on click. If the `skip` method is used, the API updatemenu will function as normal but will perform no API calls and will not bind automatically to state updates. This may be used to create a component interface and attach to updatemenu events manually via JavaScript.",
                                        "editType": "arraydraw"
                                    },
                                    "args": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "freeLength": true,
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "arraydraw"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "arraydraw"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "arraydraw"
                                            }
                                        ],
                                        "description": "Sets the arguments values to be passed to the Plotly method set in `method` on click.",
                                        "editType": "arraydraw"
                                    },
                                    "label": {
                                        "valType": "string",
                                        "role": "info",
                                        "dflt": "",
                                        "description": "Sets the text label to appear on the button.",
                                        "editType": "arraydraw"
                                    },
                                    "execute": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "description": "When true, the API method is executed. When false, all other behaviors are the same and command execution is skipped. This may be useful when hooking into, for example, the `plotly_buttonclicked` method and executing the API command manually without losing the benefit of the updatemenu automatically binding to the state of the plot through the specification of `method` and `args`.",
                                        "editType": "arraydraw"
                                    },
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "arraydraw",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "arraydraw",
                                        "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": "arraydraw",
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "x": {
                            "valType": "number",
                            "min": -2,
                            "max": 3,
                            "dflt": -0.05,
                            "role": "style",
                            "description": "Sets the x position (in normalized coordinates) of the update menu.",
                            "editType": "arraydraw"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "right",
                            "role": "info",
                            "description": "Sets the update menu's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the range selector.",
                            "editType": "arraydraw"
                        },
                        "y": {
                            "valType": "number",
                            "min": -2,
                            "max": 3,
                            "dflt": 1,
                            "role": "style",
                            "description": "Sets the y position (in normalized coordinates) of the update menu.",
                            "editType": "arraydraw"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "dflt": "top",
                            "role": "info",
                            "description": "Sets the update menu's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the range selector.",
                            "editType": "arraydraw"
                        },
                        "pad": {
                            "t": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "The amount of padding (in px) along the top of the component."
                            },
                            "r": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "The amount of padding (in px) on the right side of the component."
                            },
                            "b": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "The amount of padding (in px) along the bottom of the component."
                            },
                            "l": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "The amount of padding (in px) on the left side of the component."
                            },
                            "editType": "arraydraw",
                            "description": "Sets the padding around the buttons or dropdown menu.",
                            "role": "object"
                        },
                        "font": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "arraydraw"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "arraydraw"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "arraydraw"
                            },
                            "description": "Sets the font of the update menu button text.",
                            "editType": "arraydraw",
                            "role": "object"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "description": "Sets the background color of the update menu buttons.",
                            "editType": "arraydraw"
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#BEC8D9",
                            "role": "style",
                            "description": "Sets the color of the border enclosing the update menu.",
                            "editType": "arraydraw"
                        },
                        "borderwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "editType": "arraydraw",
                            "description": "Sets the width (in px) of the border enclosing the update menu."
                        },
                        "name": {
                            "valType": "string",
                            "role": "style",
                            "editType": "arraydraw",
                            "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."
                        },
                        "templateitemname": {
                            "valType": "string",
                            "role": "info",
                            "editType": "arraydraw",
                            "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": "arraydraw",
                        "role": "object"
                    }
                },
                "role": "object"
            },
            "sliders": {
                "items": {
                    "slider": {
                        "visible": {
                            "valType": "boolean",
                            "role": "info",
                            "dflt": true,
                            "description": "Determines whether or not the slider is visible.",
                            "editType": "arraydraw"
                        },
                        "active": {
                            "valType": "number",
                            "role": "info",
                            "min": 0,
                            "dflt": 0,
                            "description": "Determines which button (by index starting from 0) is considered active.",
                            "editType": "arraydraw"
                        },
                        "steps": {
                            "items": {
                                "step": {
                                    "visible": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "description": "Determines whether or not this step is included in the slider.",
                                        "editType": "arraydraw"
                                    },
                                    "method": {
                                        "valType": "enumerated",
                                        "values": [
                                            "restyle",
                                            "relayout",
                                            "animate",
                                            "update",
                                            "skip"
                                        ],
                                        "dflt": "restyle",
                                        "role": "info",
                                        "description": "Sets the Plotly method to be called when the slider value is changed. If the `skip` method is used, the API slider will function as normal but will perform no API calls and will not bind automatically to state updates. This may be used to create a component interface and attach to slider events manually via JavaScript.",
                                        "editType": "arraydraw"
                                    },
                                    "args": {
                                        "valType": "info_array",
                                        "role": "info",
                                        "freeLength": true,
                                        "items": [
                                            {
                                                "valType": "any",
                                                "editType": "arraydraw"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "arraydraw"
                                            },
                                            {
                                                "valType": "any",
                                                "editType": "arraydraw"
                                            }
                                        ],
                                        "description": "Sets the arguments values to be passed to the Plotly method set in `method` on slide.",
                                        "editType": "arraydraw"
                                    },
                                    "label": {
                                        "valType": "string",
                                        "role": "info",
                                        "description": "Sets the text label to appear on the slider",
                                        "editType": "arraydraw"
                                    },
                                    "value": {
                                        "valType": "string",
                                        "role": "info",
                                        "description": "Sets the value of the slider step, used to refer to the step programatically. Defaults to the slider label if not provided.",
                                        "editType": "arraydraw"
                                    },
                                    "execute": {
                                        "valType": "boolean",
                                        "role": "info",
                                        "dflt": true,
                                        "description": "When true, the API method is executed. When false, all other behaviors are the same and command execution is skipped. This may be useful when hooking into, for example, the `plotly_sliderchange` method and executing the API command manually without losing the benefit of the slider automatically binding to the state of the plot through the specification of `method` and `args`.",
                                        "editType": "arraydraw"
                                    },
                                    "name": {
                                        "valType": "string",
                                        "role": "style",
                                        "editType": "arraydraw",
                                        "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."
                                    },
                                    "templateitemname": {
                                        "valType": "string",
                                        "role": "info",
                                        "editType": "arraydraw",
                                        "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": "arraydraw",
                                    "role": "object"
                                }
                            },
                            "role": "object"
                        },
                        "lenmode": {
                            "valType": "enumerated",
                            "values": [
                                "fraction",
                                "pixels"
                            ],
                            "role": "info",
                            "dflt": "fraction",
                            "description": "Determines whether this slider length is set in units of plot *fraction* or in *pixels. Use `len` to set the value.",
                            "editType": "arraydraw"
                        },
                        "len": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "description": "Sets the length of the slider This measure excludes the padding of both ends. That is, the slider's length is this length minus the padding on both ends.",
                            "editType": "arraydraw"
                        },
                        "x": {
                            "valType": "number",
                            "min": -2,
                            "max": 3,
                            "dflt": 0,
                            "role": "style",
                            "description": "Sets the x position (in normalized coordinates) of the slider.",
                            "editType": "arraydraw"
                        },
                        "pad": {
                            "t": {
                                "valType": "number",
                                "dflt": 20,
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "The amount of padding (in px) along the top of the component."
                            },
                            "r": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "The amount of padding (in px) on the right side of the component."
                            },
                            "b": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "The amount of padding (in px) along the bottom of the component."
                            },
                            "l": {
                                "valType": "number",
                                "dflt": 0,
                                "role": "style",
                                "editType": "arraydraw",
                                "description": "The amount of padding (in px) on the left side of the component."
                            },
                            "editType": "arraydraw",
                            "description": "Set the padding of the slider component along each side.",
                            "role": "object"
                        },
                        "xanchor": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "left",
                                "center",
                                "right"
                            ],
                            "dflt": "left",
                            "role": "info",
                            "description": "Sets the slider's horizontal position anchor. This anchor binds the `x` position to the *left*, *center* or *right* of the range selector.",
                            "editType": "arraydraw"
                        },
                        "y": {
                            "valType": "number",
                            "min": -2,
                            "max": 3,
                            "dflt": 0,
                            "role": "style",
                            "description": "Sets the y position (in normalized coordinates) of the slider.",
                            "editType": "arraydraw"
                        },
                        "yanchor": {
                            "valType": "enumerated",
                            "values": [
                                "auto",
                                "top",
                                "middle",
                                "bottom"
                            ],
                            "dflt": "top",
                            "role": "info",
                            "description": "Sets the slider's vertical position anchor This anchor binds the `y` position to the *top*, *middle* or *bottom* of the range selector.",
                            "editType": "arraydraw"
                        },
                        "transition": {
                            "duration": {
                                "valType": "number",
                                "role": "info",
                                "min": 0,
                                "dflt": 150,
                                "description": "Sets the duration of the slider transition",
                                "editType": "arraydraw"
                            },
                            "easing": {
                                "valType": "enumerated",
                                "values": [
                                    "linear",
                                    "quad",
                                    "cubic",
                                    "sin",
                                    "exp",
                                    "circle",
                                    "elastic",
                                    "back",
                                    "bounce",
                                    "linear-in",
                                    "quad-in",
                                    "cubic-in",
                                    "sin-in",
                                    "exp-in",
                                    "circle-in",
                                    "elastic-in",
                                    "back-in",
                                    "bounce-in",
                                    "linear-out",
                                    "quad-out",
                                    "cubic-out",
                                    "sin-out",
                                    "exp-out",
                                    "circle-out",
                                    "elastic-out",
                                    "back-out",
                                    "bounce-out",
                                    "linear-in-out",
                                    "quad-in-out",
                                    "cubic-in-out",
                                    "sin-in-out",
                                    "exp-in-out",
                                    "circle-in-out",
                                    "elastic-in-out",
                                    "back-in-out",
                                    "bounce-in-out"
                                ],
                                "role": "info",
                                "dflt": "cubic-in-out",
                                "description": "Sets the easing function of the slider transition",
                                "editType": "arraydraw"
                            },
                            "editType": "arraydraw",
                            "role": "object"
                        },
                        "currentvalue": {
                            "visible": {
                                "valType": "boolean",
                                "role": "info",
                                "dflt": true,
                                "description": "Shows the currently-selected value above the slider.",
                                "editType": "arraydraw"
                            },
                            "xanchor": {
                                "valType": "enumerated",
                                "values": [
                                    "left",
                                    "center",
                                    "right"
                                ],
                                "dflt": "left",
                                "role": "info",
                                "description": "The alignment of the value readout relative to the length of the slider.",
                                "editType": "arraydraw"
                            },
                            "offset": {
                                "valType": "number",
                                "dflt": 10,
                                "role": "info",
                                "description": "The amount of space, in pixels, between the current value label and the slider.",
                                "editType": "arraydraw"
                            },
                            "prefix": {
                                "valType": "string",
                                "role": "info",
                                "description": "When currentvalue.visible is true, this sets the prefix of the label.",
                                "editType": "arraydraw"
                            },
                            "suffix": {
                                "valType": "string",
                                "role": "info",
                                "description": "When currentvalue.visible is true, this sets the suffix of the label.",
                                "editType": "arraydraw"
                            },
                            "font": {
                                "family": {
                                    "valType": "string",
                                    "role": "style",
                                    "noBlank": true,
                                    "strict": true,
                                    "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                    "editType": "arraydraw"
                                },
                                "size": {
                                    "valType": "number",
                                    "role": "style",
                                    "min": 1,
                                    "editType": "arraydraw"
                                },
                                "color": {
                                    "valType": "color",
                                    "role": "style",
                                    "editType": "arraydraw"
                                },
                                "description": "Sets the font of the current value label text.",
                                "editType": "arraydraw",
                                "role": "object"
                            },
                            "editType": "arraydraw",
                            "role": "object"
                        },
                        "font": {
                            "family": {
                                "valType": "string",
                                "role": "style",
                                "noBlank": true,
                                "strict": true,
                                "description": "HTML font family - the typeface that will be applied by the web browser. The web browser will only be able to apply a font if it is available on the system which it operates. Provide multiple font families, separated by commas, to indicate the preference in which to apply fonts if they aren't available on the system. The plotly service (at https://plot.ly or on-premise) generates images on a server, where only a select number of fonts are installed and supported. These include *Arial*, *Balto*, *Courier New*, *Droid Sans*,, *Droid Serif*, *Droid Sans Mono*, *Gravitas One*, *Old Standard TT*, *Open Sans*, *Overpass*, *PT Sans Narrow*, *Raleway*, *Times New Roman*.",
                                "editType": "arraydraw"
                            },
                            "size": {
                                "valType": "number",
                                "role": "style",
                                "min": 1,
                                "editType": "arraydraw"
                            },
                            "color": {
                                "valType": "color",
                                "role": "style",
                                "editType": "arraydraw"
                            },
                            "description": "Sets the font of the slider step labels.",
                            "editType": "arraydraw",
                            "role": "object"
                        },
                        "activebgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#dbdde0",
                            "description": "Sets the background color of the slider grip while dragging.",
                            "editType": "arraydraw"
                        },
                        "bgcolor": {
                            "valType": "color",
                            "role": "style",
                            "dflt": "#f8fafc",
                            "description": "Sets the background color of the slider.",
                            "editType": "arraydraw"
                        },
                        "bordercolor": {
                            "valType": "color",
                            "dflt": "#bec8d9",
                            "role": "style",
                            "description": "Sets the color of the border enclosing the slider.",
                            "editType": "arraydraw"
                        },
                        "borderwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "description": "Sets the width (in px) of the border enclosing the slider.",
                            "editType": "arraydraw"
                        },
                        "ticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 7,
                            "role": "style",
                            "description": "Sets the length in pixels of step tick marks",
                            "editType": "arraydraw"
                        },
                        "tickcolor": {
                            "valType": "color",
                            "dflt": "#333",
                            "role": "style",
                            "description": "Sets the color of the border enclosing the slider.",
                            "editType": "arraydraw"
                        },
                        "tickwidth": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 1,
                            "role": "style",
                            "description": "Sets the tick width (in px).",
                            "editType": "arraydraw"
                        },
                        "minorticklen": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 4,
                            "role": "style",
                            "description": "Sets the length in pixels of minor step tick marks",
                            "editType": "arraydraw"
                        },
                        "name": {
                            "valType": "string",
                            "role": "style",
                            "editType": "arraydraw",
                            "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."
                        },
                        "templateitemname": {
                            "valType": "string",
                            "role": "info",
                            "editType": "arraydraw",
                            "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": "arraydraw",
                        "role": "object"
                    }
                },
                "role": "object"
            }
        }
    },
    "transforms": {
        "aggregate": {
            "attributes": {
                "enabled": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether this aggregate transform is enabled or disabled."
                },
                "groups": {
                    "valType": "string",
                    "strict": true,
                    "noBlank": true,
                    "arrayOk": true,
                    "dflt": "x",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the grouping target to which the aggregation is applied. Data points with matching group values will be coalesced into one point, using the supplied aggregation functions to reduce data in other data arrays. If a string, `groups` is assumed to be a reference to a data array in the parent trace object. To aggregate by nested variables, use *.* to access them. For example, set `groups` to *marker.color* to aggregate about the marker color array. If an array, `groups` is itself the data array by which we aggregate."
                },
                "aggregations": {
                    "items": {
                        "aggregation": {
                            "target": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "description": "A reference to the data array in the parent trace to aggregate. To aggregate by nested variables, use *.* to access them. For example, set `groups` to *marker.color* to aggregate over the marker color array. The referenced array must already exist, unless `func` is *count*, and each array may only be referenced once."
                            },
                            "func": {
                                "valType": "enumerated",
                                "values": [
                                    "count",
                                    "sum",
                                    "avg",
                                    "median",
                                    "mode",
                                    "rms",
                                    "stddev",
                                    "min",
                                    "max",
                                    "first",
                                    "last",
                                    "change",
                                    "range"
                                ],
                                "dflt": "first",
                                "role": "info",
                                "editType": "calc",
                                "description": "Sets the aggregation function. All values from the linked `target`, corresponding to the same value in the `groups` array, are collected and reduced by this function. *count* is simply the number of values in the `groups` array, so does not even require the linked array to exist. *first* (*last*) is just the first (last) linked value. Invalid values are ignored, so for example in *avg* they do not contribute to either the numerator or the denominator. Any data type (numeric, date, category) may be aggregated with any function, even though in certain cases it is unlikely to make sense, for example a sum of dates or average of categories. *median* will return the average of the two central values if there is an even count. *mode* will return the first value to reach the maximum count, in case of a tie. *change* will return the difference between the first and last linked values. *range* will return the difference between the min and max linked values."
                            },
                            "funcmode": {
                                "valType": "enumerated",
                                "values": [
                                    "sample",
                                    "population"
                                ],
                                "dflt": "sample",
                                "role": "info",
                                "editType": "calc",
                                "description": "*stddev* supports two formula variants: *sample* (normalize by N-1) and *population* (normalize by N)."
                            },
                            "enabled": {
                                "valType": "boolean",
                                "dflt": true,
                                "role": "info",
                                "editType": "calc",
                                "description": "Determines whether this aggregation function is enabled or disabled."
                            },
                            "editType": "calc",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "editType": "calc",
                "groupssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  groups .",
                    "editType": "none"
                }
            }
        },
        "filter": {
            "attributes": {
                "enabled": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether this filter transform is enabled or disabled."
                },
                "target": {
                    "valType": "string",
                    "strict": true,
                    "noBlank": true,
                    "arrayOk": true,
                    "dflt": "x",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the filter target by which the filter is applied. If a string, `target` is assumed to be a reference to a data array in the parent trace object. To filter about nested variables, use *.* to access them. For example, set `target` to *marker.color* to filter about the marker color array. If an array, `target` is then the data array by which the filter is applied."
                },
                "operation": {
                    "valType": "enumerated",
                    "values": [
                        "=",
                        "!=",
                        "<",
                        ">=",
                        ">",
                        "<=",
                        "[]",
                        "()",
                        "[)",
                        "(]",
                        "][",
                        ")(",
                        "](",
                        ")[",
                        "{}",
                        "}{"
                    ],
                    "dflt": "=",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the filter operation. *=* keeps items equal to `value` *!=* keeps items not equal to `value` *<* keeps items less than `value` *<=* keeps items less than or equal to `value` *>* keeps items greater than `value` *>=* keeps items greater than or equal to `value` *[]* keeps items inside `value[0]` to `value[1]` including both bounds *()* keeps items inside `value[0]` to `value[1]` excluding both bounds *[)* keeps items inside `value[0]` to `value[1]` including `value[0]` but excluding `value[1] *(]* keeps items inside `value[0]` to `value[1]` excluding `value[0]` but including `value[1] *][* keeps items outside `value[0]` to `value[1]` and equal to both bounds *)(* keeps items outside `value[0]` to `value[1]` *](* keeps items outside `value[0]` to `value[1]` and equal to `value[0]` *)[* keeps items outside `value[0]` to `value[1]` and equal to `value[1]` *{}* keeps items present in a set of values *}{* keeps items not present in a set of values"
                },
                "value": {
                    "valType": "any",
                    "dflt": 0,
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the value or values by which to filter. Values are expected to be in the same type as the data linked to `target`. When `operation` is set to one of the comparison values (=,!=,<,>=,>,<=) `value` is expected to be a number or a string. When `operation` is set to one of the interval values ([],(),[),(],][,)(,](,)[) `value` is expected to be 2-item array where the first item is the lower bound and the second item is the upper bound. When `operation`, is set to one of the set values ({},}{) `value` is expected to be an array with as many items as the desired set elements."
                },
                "preservegaps": {
                    "valType": "boolean",
                    "dflt": false,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether or not gaps in data arrays produced by the filter operation are preserved. Setting this to *true* might be useful when plotting a line chart with `connectgaps` set to *false*."
                },
                "editType": "calc",
                "valuecalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use for `value`, if it is a date."
                },
                "targetcalendar": {
                    "valType": "enumerated",
                    "values": [
                        "gregorian",
                        "chinese",
                        "coptic",
                        "discworld",
                        "ethiopian",
                        "hebrew",
                        "islamic",
                        "julian",
                        "mayan",
                        "nanakshahi",
                        "nepali",
                        "persian",
                        "jalali",
                        "taiwan",
                        "thai",
                        "ummalqura"
                    ],
                    "role": "info",
                    "editType": "calc",
                    "dflt": "gregorian",
                    "description": "Sets the calendar system to use for `target`, if it is an array of dates. If `target` is a string (eg *x*) we use the corresponding trace attribute (eg `xcalendar`) if it exists, even if `targetcalendar` is provided."
                },
                "targetsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  target .",
                    "editType": "none"
                }
            }
        },
        "groupby": {
            "attributes": {
                "enabled": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether this group-by transform is enabled or disabled."
                },
                "groups": {
                    "valType": "data_array",
                    "dflt": [],
                    "role": "data",
                    "editType": "calc",
                    "description": "Sets the groups in which the trace data will be split. For example, with `x` set to *[1, 2, 3, 4]* and `groups` set to *['a', 'b', 'a', 'b']*, the groupby transform with split in one trace with `x` [1, 3] and one trace with `x` [2, 4]."
                },
                "nameformat": {
                    "valType": "string",
                    "role": "info",
                    "editType": "calc",
                    "description": "Pattern by which grouped traces are named. If only one trace is present, defaults to the group name (`\"%{group}\"`), otherwise defaults to the group name with trace name (`\"%{group} (%{trace})\"`). Available escape sequences are `%{group}`, which inserts the group name, and `%{trace}`, which inserts the trace name. If grouping GDP data by country when more than one trace is present, for example, the default \"%{group} (%{trace})\" would return \"Monaco (GDP per capita)\"."
                },
                "styles": {
                    "items": {
                        "style": {
                            "target": {
                                "valType": "string",
                                "role": "info",
                                "editType": "calc",
                                "description": "The group value which receives these styles."
                            },
                            "value": {
                                "valType": "any",
                                "role": "info",
                                "dflt": {},
                                "editType": "calc",
                                "description": "Sets each group styles. For example, with `groups` set to *['a', 'b', 'a', 'b']* and `styles` set to *[{target: 'a', value: { marker: { color: 'red' } }}] marker points in group *'a'* will be drawn in red.",
                                "_compareAsJSON": true
                            },
                            "editType": "calc",
                            "role": "object"
                        }
                    },
                    "role": "object"
                },
                "editType": "calc",
                "groupssrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  groups .",
                    "editType": "none"
                }
            }
        },
        "sort": {
            "attributes": {
                "enabled": {
                    "valType": "boolean",
                    "dflt": true,
                    "role": "info",
                    "editType": "calc",
                    "description": "Determines whether this sort transform is enabled or disabled."
                },
                "target": {
                    "valType": "string",
                    "strict": true,
                    "noBlank": true,
                    "arrayOk": true,
                    "dflt": "x",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the target by which the sort transform is applied. If a string, *target* is assumed to be a reference to a data array in the parent trace object. To sort about nested variables, use *.* to access them. For example, set `target` to *marker.size* to sort about the marker size array. If an array, *target* is then the data array by which the sort transform is applied."
                },
                "order": {
                    "valType": "enumerated",
                    "values": [
                        "ascending",
                        "descending"
                    ],
                    "dflt": "ascending",
                    "role": "info",
                    "editType": "calc",
                    "description": "Sets the sort transform order."
                },
                "editType": "calc",
                "targetsrc": {
                    "valType": "string",
                    "role": "info",
                    "description": "Sets the source reference on plot.ly for  target .",
                    "editType": "none"
                }
            }
        }
    },
    "frames": {
        "items": {
            "frames_entry": {
                "group": {
                    "valType": "string",
                    "role": "info",
                    "description": "An identifier that specifies the group to which the frame belongs, used by animate to select a subset of frames."
                },
                "name": {
                    "valType": "string",
                    "role": "info",
                    "description": "A label by which to identify the frame"
                },
                "traces": {
                    "valType": "any",
                    "role": "info",
                    "description": "A list of trace indices that identify the respective traces in the data attribute"
                },
                "baseframe": {
                    "valType": "string",
                    "role": "info",
                    "description": "The name of the frame into which this frame's properties are merged before applying. This is used to unify properties and avoid needing to specify the same values for the same properties in multiple frames."
                },
                "data": {
                    "valType": "any",
                    "role": "object",
                    "description": "A list of traces this frame modifies. The format is identical to the normal trace definition."
                },
                "layout": {
                    "valType": "any",
                    "role": "object",
                    "description": "Layout properties which this frame modifies. The format is identical to the normal layout definition."
                },
                "role": "object"
            }
        },
        "role": "object"
    },
    "animation": {
        "mode": {
            "valType": "enumerated",
            "dflt": "afterall",
            "role": "info",
            "values": [
                "immediate",
                "next",
                "afterall"
            ],
            "description": "Describes how a new animate call interacts with currently-running animations. If `immediate`, current animations are interrupted and the new animation is started. If `next`, the current frame is allowed to complete, after which the new animation is started. If `afterall` all existing frames are animated to completion before the new animation is started."
        },
        "direction": {
            "valType": "enumerated",
            "role": "info",
            "values": [
                "forward",
                "reverse"
            ],
            "dflt": "forward",
            "description": "The direction in which to play the frames triggered by the animation call"
        },
        "fromcurrent": {
            "valType": "boolean",
            "dflt": false,
            "role": "info",
            "description": "Play frames starting at the current frame instead of the beginning."
        },
        "frame": {
            "duration": {
                "valType": "number",
                "role": "info",
                "min": 0,
                "dflt": 500,
                "description": "The duration in milliseconds of each frame. If greater than the frame duration, it will be limited to the frame duration."
            },
            "redraw": {
                "valType": "boolean",
                "role": "info",
                "dflt": true,
                "description": "Redraw the plot at completion of the transition. This is desirable for transitions that include properties that cannot be transitioned, but may significantly slow down updates that do not require a full redraw of the plot"
            },
            "role": "object"
        },
        "transition": {
            "duration": {
                "valType": "number",
                "role": "info",
                "min": 0,
                "dflt": 500,
                "description": "The duration of the transition, in milliseconds. If equal to zero, updates are synchronous."
            },
            "easing": {
                "valType": "enumerated",
                "dflt": "cubic-in-out",
                "values": [
                    "linear",
                    "quad",
                    "cubic",
                    "sin",
                    "exp",
                    "circle",
                    "elastic",
                    "back",
                    "bounce",
                    "linear-in",
                    "quad-in",
                    "cubic-in",
                    "sin-in",
                    "exp-in",
                    "circle-in",
                    "elastic-in",
                    "back-in",
                    "bounce-in",
                    "linear-out",
                    "quad-out",
                    "cubic-out",
                    "sin-out",
                    "exp-out",
                    "circle-out",
                    "elastic-out",
                    "back-out",
                    "bounce-out",
                    "linear-in-out",
                    "quad-in-out",
                    "cubic-in-out",
                    "sin-in-out",
                    "exp-in-out",
                    "circle-in-out",
                    "elastic-in-out",
                    "back-in-out",
                    "bounce-in-out"
                ],
                "role": "info",
                "description": "The easing function used for the transition"
            },
            "role": "object"
        }
    }
}