Jump to API response

Get information for validating plotlyjs JSON blobs.


Reference



Actions



get

Make a GET request to this endpoint to receive the most up-to-date version of the plotlyjs plot-schema for validating plotlyjs JSON blobs.

All GET requests require that a 'sha1' query param be included to prevent unneeded network traffic. If you don't have a hash for the schema yet, it may be left blank. It's enforced to make it clear to developers that this option exists. The calculated sha1 hash is returned in every response as a convenience.

Examples:

// GET https://api.plot.ly/v2/plot-schema --> 400 Bad Request

// GET https://api.plot.ly/v2/plot-schema?sha1 --> 200 OK
{
    "sha1": "296e75b44c1f210df801e1a812bf243d8bdb2198",
    "modified": true,
    "schema": { .. }
}

// GET https://api.plot.ly/v2/plot-schema?sha1=296e75b44c1f210df801e1a812bf243d8bdb2198 --> 200 OK
{
    "sha1": "296e75b44c1f210df801e1a812bf243d8bdb2198",
    "modified": false
}


Responses


200 OK responses always include the following fields:

  • 'sha1' The hash stored in the Plotly backend for the plot-schema JSON.
  • 'modified' Only True if the given hash doesn't match the backend's.

If the plot schema has been modified (i.e., hashes don't match), the following field will also be included:

  • 'schema' The full plot schema.

GET /v2/plot-schema?sha1=%27%27
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "sha1": "7714b464dd3a3802793a911e0f0900648fe85bc6",
    "modified": true,
    "schema": {
        "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",
                        "colorbars"
                    ],
                    "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. *colorbars* only redraws colorbars."
                }
            },
            "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."
                },
                "categories": [
                    "cartesian",
                    "svg",
                    "symbols",
                    "errorBarsOK",
                    "showLegend",
                    "scatter-like",
                    "zoomScale"
                ],
                "animatable": true,
                "type": "scatter",
                "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",
                        "anim": true,
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "ids": {
                        "valType": "data_array",
                        "editType": "calc",
                        "anim": true,
                        "description": "Assigns id labels to each datum. These ids for object constancy of data points during animation. Should be an array of strings, not numbers or any other type.",
                        "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "x": {
                        "valType": "data_array",
                        "editType": "calc+clearAxisTypes",
                        "anim": true,
                        "description": "Sets the x coordinates.",
                        "role": "data"
                    },
                    "x0": {
                        "valType": "any",
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc+clearAxisTypes",
                        "anim": true,
                        "description": "Alternate to `x`. Builds a linear space of x coordinates. Use with `dx` where `x0` is the starting coordinate and `dx` the step."
                    },
                    "dx": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "info",
                        "editType": "calc",
                        "anim": true,
                        "description": "Sets the x coordinate step. See `x0` for more info."
                    },
                    "y": {
                        "valType": "data_array",
                        "editType": "calc+clearAxisTypes",
                        "anim": true,
                        "description": "Sets the y coordinates.",
                        "role": "data"
                    },
                    "y0": {
                        "valType": "any",
                        "dflt": 0,
                        "role": "info",
                        "editType": "calc+clearAxisTypes",
                        "anim": true,
                        "description": "Alternate to `y`. Builds a linear space of y coordinates. Use with `dy` where `y0` is the starting coordinate and `dy` the step."
                    },
                    "dy": {
                        "valType": "number",
                        "dflt": 1,
                        "role": "info",
                        "editType": "calc",
                        "anim": true,
                        "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*."
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available.  Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "line": {
                        "color": {
                            "valType": "color",
                            "role": "style",
                            "editType": "style",
                            "anim": true,
                            "description": "Sets the line color."
                        },
                        "width": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 2,
                            "role": "style",
                            "editType": "style",
                            "anim": true,
                            "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",
                        "anim": true,
                        "description": "Sets the fill color. Defaults to a half-transparent variant of the line color, marker color, or marker line color, whichever is available."
                    },
                    "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",
                            "anim": true,
                            "description": "Sets the marker opacity."
                        },
                        "size": {
                            "valType": "number",
                            "min": 0,
                            "dflt": 6,
                            "arrayOk": true,
                            "role": "style",
                            "editType": "calc",
                            "anim": true,
                            "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."
                        },
                        "line": {
                            "width": {
                                "valType": "number",
                                "min": 0,
                                "arrayOk": true,
                                "role": "style",
                                "editType": "style",
                                "anim": true,
                                "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.",
                                "anim": true
                            },
                            "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."
                            },
                            "cmid": {
                                "valType": "number",
                                "role": "info",
                                "dflt": null,
                                "editType": "calc",
                                "impliedEdits": {},
                                "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color`is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`."
                            },
                            "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": "plot",
                                "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."
                            },
                            "coloraxis": {
                                "valType": "subplotid",
                                "role": "info",
                                "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                                "dflt": null,
                                "editType": "calc",
                                "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                            },
                            "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.",
                            "anim": true
                        },
                        "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."
                        },
                        "cmid": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {},
                            "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color`is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`."
                        },
                        "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": "plot",
                            "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-3.x-api-reference/blob/master/Formatting.md#d3_format And for dates see: https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#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": {
                                "text": {
                                    "valType": "string",
                                    "role": "info",
                                    "description": "Sets the title of the color bar. Note that before the existence of `title.text`, the title's contents used to be defined as the `title` attribute itself. This behavior has been deprecated.",
                                    "editType": "colorbars"
                                },
                                "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": "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. Note that the title's font used to be set by the now deprecated `titlefont` attribute.",
                                    "editType": "colorbars",
                                    "role": "object"
                                },
                                "side": {
                                    "valType": "enumerated",
                                    "values": [
                                        "right",
                                        "top",
                                        "bottom"
                                    ],
                                    "role": "style",
                                    "dflt": "top",
                                    "description": "Determines the location of color bar's title with respect to the color bar. Note that the title's location used to be set by the now deprecated `titleside` attribute.",
                                    "editType": "colorbars"
                                },
                                "editType": "colorbars",
                                "role": "object"
                            },
                            "_deprecated": {
                                "title": {
                                    "valType": "string",
                                    "role": "info",
                                    "description": "Deprecated in favor of color bar's `title.text`. Note that value of color bar's `title` is no longer a simple *string* but a set of sub-attributes.",
                                    "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": "Deprecated in favor of color bar's `title.font`.",
                                    "editType": "colorbars"
                                },
                                "titleside": {
                                    "valType": "enumerated",
                                    "values": [
                                        "right",
                                        "top",
                                        "bottom"
                                    ],
                                    "role": "style",
                                    "dflt": "top",
                                    "description": "Deprecated in favor of color bar's `title.side`.",
                                    "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"
                            }
                        },
                        "coloraxis": {
                            "valType": "subplotid",
                            "role": "info",
                            "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                            "dflt": null,
                            "editType": "calc",
                            "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                        },
                        "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 *data*, 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 *data*, 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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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."
                },
                "categories": [
                    "bar-like",
                    "cartesian",
                    "svg",
                    "bar",
                    "oriented",
                    "errorBarsOK",
                    "showLegend",
                    "zoomScale"
                ],
                "animatable": false,
                "type": "bar",
                "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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."
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available.  Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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."
                    },
                    "insidetextanchor": {
                        "valType": "enumerated",
                        "values": [
                            "end",
                            "middle",
                            "start"
                        ],
                        "dflt": "end",
                        "role": "info",
                        "editType": "plot",
                        "description": "Determines if texts are kept at center or start/end points in `textposition` *inside* mode."
                    },
                    "textangle": {
                        "valType": "angle",
                        "dflt": "auto",
                        "role": "info",
                        "editType": "plot",
                        "description": "Sets the angle of the tick labels with respect to the bar. For example, a `tickangle` of -90 draws the tick labels vertically. With *auto* the texts may automatically be rotated to fit with the maximum size in bars."
                    },
                    "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."
                            },
                            "cmid": {
                                "valType": "number",
                                "role": "info",
                                "dflt": null,
                                "editType": "calc",
                                "impliedEdits": {},
                                "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color`is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`."
                            },
                            "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": "plot",
                                "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."
                            },
                            "coloraxis": {
                                "valType": "subplotid",
                                "role": "info",
                                "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                                "dflt": null,
                                "editType": "calc",
                                "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                            },
                            "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."
                        },
                        "cmid": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {},
                            "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color`is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`."
                        },
                        "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": "plot",
                            "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-3.x-api-reference/blob/master/Formatting.md#d3_format And for dates see: https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#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": {
                                "text": {
                                    "valType": "string",
                                    "role": "info",
                                    "description": "Sets the title of the color bar. Note that before the existence of `title.text`, the title's contents used to be defined as the `title` attribute itself. This behavior has been deprecated.",
                                    "editType": "colorbars"
                                },
                                "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": "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. Note that the title's font used to be set by the now deprecated `titlefont` attribute.",
                                    "editType": "colorbars",
                                    "role": "object"
                                },
                                "side": {
                                    "valType": "enumerated",
                                    "values": [
                                        "right",
                                        "top",
                                        "bottom"
                                    ],
                                    "role": "style",
                                    "dflt": "top",
                                    "description": "Determines the location of color bar's title with respect to the color bar. Note that the title's location used to be set by the now deprecated `titleside` attribute.",
                                    "editType": "colorbars"
                                },
                                "editType": "colorbars",
                                "role": "object"
                            },
                            "_deprecated": {
                                "title": {
                                    "valType": "string",
                                    "role": "info",
                                    "description": "Deprecated in favor of color bar's `title.text`. Note that value of color bar's `title` is no longer a simple *string* but a set of sub-attributes.",
                                    "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": "Deprecated in favor of color bar's `title.font`.",
                                    "editType": "colorbars"
                                },
                                "titleside": {
                                    "valType": "enumerated",
                                    "values": [
                                        "right",
                                        "top",
                                        "bottom"
                                    ],
                                    "role": "style",
                                    "dflt": "top",
                                    "description": "Deprecated in favor of color bar's `title.side`.",
                                    "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"
                            }
                        },
                        "coloraxis": {
                            "valType": "subplotid",
                            "role": "info",
                            "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                            "dflt": null,
                            "editType": "calc",
                            "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                        },
                        "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"
                        }
                    },
                    "offsetgroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up."
                    },
                    "alignmentgroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently."
                    },
                    "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 *data*, 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 *data*, 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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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."
                },
                "categories": [
                    "cartesian",
                    "svg",
                    "symbols",
                    "oriented",
                    "box-violin",
                    "showLegend",
                    "boxLayout",
                    "zoomScale"
                ],
                "animatable": false,
                "type": "box",
                "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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."
                    },
                    "hovertext": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "arrayOk": true,
                        "editType": "style",
                        "description": "Same as `text`."
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available.  Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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)."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "info",
                        "dflt": 0,
                        "editType": "calc",
                        "description": "Sets the width of the box in data coordinate If *0* (default value) the width is automatically selected based on the positions of other box traces in the same subplot."
                    },
                    "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."
                    },
                    "offsetgroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up."
                    },
                    "alignmentgroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently."
                    },
                    "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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertext .",
                        "editType": "none"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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. Has no effect on traces that have *width* set."
                    },
                    "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. Has no effect on traces that have *width* set."
                    },
                    "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. Has no effect on traces that have *width* set."
                    }
                }
            },
            "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."
                },
                "categories": [
                    "cartesian",
                    "svg",
                    "2dMap"
                ],
                "animatable": false,
                "type": "heatmap",
                "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)."
                    },
                    "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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"
                    },
                    "hovertext": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Same as `text`.",
                        "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-3.x-api-reference/blob/master/Formatting.md#d3_format"
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available.  Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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."
                    },
                    "zmid": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {},
                        "description": "Sets the mid-point of the color domain by scaling `zmin` and/or `zmax` to be equidistant to this point. Value should have the same units as in `z`. Has no effect when `zauto` is `false`."
                    },
                    "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": "plot",
                        "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-3.x-api-reference/blob/master/Formatting.md#d3_format And for dates see: https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#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": {
                            "text": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the title of the color bar. Note that before the existence of `title.text`, the title's contents used to be defined as the `title` attribute itself. This behavior has been deprecated.",
                                "editType": "colorbars"
                            },
                            "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": "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. Note that the title's font used to be set by the now deprecated `titlefont` attribute.",
                                "editType": "colorbars",
                                "role": "object"
                            },
                            "side": {
                                "valType": "enumerated",
                                "values": [
                                    "right",
                                    "top",
                                    "bottom"
                                ],
                                "role": "style",
                                "dflt": "top",
                                "description": "Determines the location of color bar's title with respect to the color bar. Note that the title's location used to be set by the now deprecated `titleside` attribute.",
                                "editType": "colorbars"
                            },
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "_deprecated": {
                            "title": {
                                "valType": "string",
                                "role": "info",
                                "description": "Deprecated in favor of color bar's `title.text`. Note that value of color bar's `title` is no longer a simple *string* but a set of sub-attributes.",
                                "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": "Deprecated in favor of color bar's `title.font`.",
                                "editType": "colorbars"
                            },
                            "titleside": {
                                "valType": "enumerated",
                                "values": [
                                    "right",
                                    "top",
                                    "bottom"
                                ],
                                "role": "style",
                                "dflt": "top",
                                "description": "Deprecated in favor of color bar's `title.side`.",
                                "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"
                        }
                    },
                    "coloraxis": {
                        "valType": "subplotid",
                        "role": "info",
                        "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                        "dflt": null,
                        "editType": "calc",
                        "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                    },
                    "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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertext .",
                        "editType": "none"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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."
                },
                "categories": [
                    "bar-like",
                    "cartesian",
                    "svg",
                    "bar",
                    "histogram",
                    "oriented",
                    "errorBarsOK",
                    "showLegend"
                ],
                "animatable": false,
                "type": "histogram",
                "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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 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."
                    },
                    "hovertext": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "arrayOk": true,
                        "editType": "style",
                        "description": "Same as `text`."
                    },
                    "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",
                        "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."
                    },
                    "bingroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set a group of histogram traces which will have compatible bin settings. Note that traces on the same subplot and with the same *orientation* under `barmode` *stack*, *relative* and *group* are forced into the same bingroup, Using `bingroup`, traces under `barmode` *overlay* and on different axes (of the same axis type) can have compatible bin settings. Note that histogram and histogram2d* trace can share the same `bingroup`"
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. variable `binNumber` Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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."
                            },
                            "cmid": {
                                "valType": "number",
                                "role": "info",
                                "dflt": null,
                                "editType": "calc",
                                "impliedEdits": {},
                                "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color`is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`."
                            },
                            "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": "plot",
                                "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."
                            },
                            "coloraxis": {
                                "valType": "subplotid",
                                "role": "info",
                                "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                                "dflt": null,
                                "editType": "calc",
                                "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                            },
                            "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."
                        },
                        "cmid": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {},
                            "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color`is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`."
                        },
                        "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": "plot",
                            "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-3.x-api-reference/blob/master/Formatting.md#d3_format And for dates see: https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#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": {
                                "text": {
                                    "valType": "string",
                                    "role": "info",
                                    "description": "Sets the title of the color bar. Note that before the existence of `title.text`, the title's contents used to be defined as the `title` attribute itself. This behavior has been deprecated.",
                                    "editType": "colorbars"
                                },
                                "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": "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. Note that the title's font used to be set by the now deprecated `titlefont` attribute.",
                                    "editType": "colorbars",
                                    "role": "object"
                                },
                                "side": {
                                    "valType": "enumerated",
                                    "values": [
                                        "right",
                                        "top",
                                        "bottom"
                                    ],
                                    "role": "style",
                                    "dflt": "top",
                                    "description": "Determines the location of color bar's title with respect to the color bar. Note that the title's location used to be set by the now deprecated `titleside` attribute.",
                                    "editType": "colorbars"
                                },
                                "editType": "colorbars",
                                "role": "object"
                            },
                            "_deprecated": {
                                "title": {
                                    "valType": "string",
                                    "role": "info",
                                    "description": "Deprecated in favor of color bar's `title.text`. Note that value of color bar's `title` is no longer a simple *string* but a set of sub-attributes.",
                                    "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": "Deprecated in favor of color bar's `title.font`.",
                                    "editType": "colorbars"
                                },
                                "titleside": {
                                    "valType": "enumerated",
                                    "values": [
                                        "right",
                                        "top",
                                        "bottom"
                                    ],
                                    "role": "style",
                                    "dflt": "top",
                                    "description": "Deprecated in favor of color bar's `title.side`.",
                                    "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"
                            }
                        },
                        "coloraxis": {
                            "valType": "subplotid",
                            "role": "info",
                            "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                            "dflt": null,
                            "editType": "calc",
                            "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                        },
                        "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"
                        }
                    },
                    "offsetgroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up."
                    },
                    "alignmentgroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently."
                    },
                    "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 *data*, 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 *data*, 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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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."
                },
                "categories": [
                    "cartesian",
                    "svg",
                    "2dMap",
                    "histogram"
                ],
                "animatable": false,
                "type": "histogram2d",
                "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)."
                    },
                    "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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",
                        "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."
                    },
                    "bingroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set the `xbingroup` and `ybingroup` default prefix For example, setting a `bingroup` of *1* on two histogram2d traces will make them their x-bins and y-bins match separately."
                    },
                    "xbingroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set a group of histogram traces which will have compatible x-bin settings. Using `xbingroup`, histogram2d and histogram2dcontour traces  (on axes of the same axis type) can have compatible x-bin settings. Note that the same `xbingroup` value can be used to set (1D) histogram `bingroup`"
                    },
                    "ybingroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set a group of histogram traces which will have compatible y-bin settings. Using `ybingroup`, histogram2d and histogram2dcontour traces  (on axes of the same axis type) can have compatible y-bin settings. Note that the same `ybingroup` value can be used to set (1D) histogram `bingroup`"
                    },
                    "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-3.x-api-reference/blob/master/Formatting.md#d3_format"
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. variable `z` Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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."
                    },
                    "zmid": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {},
                        "description": "Sets the mid-point of the color domain by scaling `zmin` and/or `zmax` to be equidistant to this point. Value should have the same units as in `z`. Has no effect when `zauto` is `false`."
                    },
                    "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": "plot",
                        "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-3.x-api-reference/blob/master/Formatting.md#d3_format And for dates see: https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#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": {
                            "text": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the title of the color bar. Note that before the existence of `title.text`, the title's contents used to be defined as the `title` attribute itself. This behavior has been deprecated.",
                                "editType": "colorbars"
                            },
                            "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": "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. Note that the title's font used to be set by the now deprecated `titlefont` attribute.",
                                "editType": "colorbars",
                                "role": "object"
                            },
                            "side": {
                                "valType": "enumerated",
                                "values": [
                                    "right",
                                    "top",
                                    "bottom"
                                ],
                                "role": "style",
                                "dflt": "top",
                                "description": "Determines the location of color bar's title with respect to the color bar. Note that the title's location used to be set by the now deprecated `titleside` attribute.",
                                "editType": "colorbars"
                            },
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "_deprecated": {
                            "title": {
                                "valType": "string",
                                "role": "info",
                                "description": "Deprecated in favor of color bar's `title.text`. Note that value of color bar's `title` is no longer a simple *string* but a set of sub-attributes.",
                                "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": "Deprecated in favor of color bar's `title.font`.",
                                "editType": "colorbars"
                            },
                            "titleside": {
                                "valType": "enumerated",
                                "values": [
                                    "right",
                                    "top",
                                    "bottom"
                                ],
                                "role": "style",
                                "dflt": "top",
                                "description": "Deprecated in favor of color bar's `title.side`.",
                                "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"
                        }
                    },
                    "coloraxis": {
                        "valType": "subplotid",
                        "role": "info",
                        "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                        "dflt": null,
                        "editType": "calc",
                        "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                    },
                    "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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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."
                },
                "categories": [
                    "cartesian",
                    "svg",
                    "2dMap",
                    "contour",
                    "histogram",
                    "showLegend"
                ],
                "animatable": false,
                "type": "histogram2dcontour",
                "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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",
                        "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."
                    },
                    "bingroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set the `xbingroup` and `ybingroup` default prefix For example, setting a `bingroup` of *1* on two histogram2d traces will make them their x-bins and y-bins match separately."
                    },
                    "xbingroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set a group of histogram traces which will have compatible x-bin settings. Using `xbingroup`, histogram2d and histogram2dcontour traces  (on axes of the same axis type) can have compatible x-bin settings. Note that the same `xbingroup` value can be used to set (1D) histogram `bingroup`"
                    },
                    "ybingroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set a group of histogram traces which will have compatible y-bin settings. Using `ybingroup`, histogram2d and histogram2dcontour traces  (on axes of the same axis type) can have compatible y-bin settings. Note that the same `ybingroup` value can be used to set (1D) histogram `bingroup`"
                    },
                    "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-3.x-api-reference/blob/master/Formatting.md#d3_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-3.x-api-reference/blob/master/Formatting.md#d3_format"
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available. variable `z` Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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."
                    },
                    "zmid": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {},
                        "description": "Sets the mid-point of the color domain by scaling `zmin` and/or `zmax` to be equidistant to this point. Value should have the same units as in `z`. Has no effect when `zauto` is `false`."
                    },
                    "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": "plot",
                        "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-3.x-api-reference/blob/master/Formatting.md#d3_format And for dates see: https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#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": {
                            "text": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the title of the color bar. Note that before the existence of `title.text`, the title's contents used to be defined as the `title` attribute itself. This behavior has been deprecated.",
                                "editType": "colorbars"
                            },
                            "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": "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. Note that the title's font used to be set by the now deprecated `titlefont` attribute.",
                                "editType": "colorbars",
                                "role": "object"
                            },
                            "side": {
                                "valType": "enumerated",
                                "values": [
                                    "right",
                                    "top",
                                    "bottom"
                                ],
                                "role": "style",
                                "dflt": "top",
                                "description": "Determines the location of color bar's title with respect to the color bar. Note that the title's location used to be set by the now deprecated `titleside` attribute.",
                                "editType": "colorbars"
                            },
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "_deprecated": {
                            "title": {
                                "valType": "string",
                                "role": "info",
                                "description": "Deprecated in favor of color bar's `title.text`. Note that value of color bar's `title` is no longer a simple *string* but a set of sub-attributes.",
                                "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": "Deprecated in favor of color bar's `title.font`.",
                                "editType": "colorbars"
                            },
                            "titleside": {
                                "valType": "enumerated",
                                "values": [
                                    "right",
                                    "top",
                                    "bottom"
                                ],
                                "role": "style",
                                "dflt": "top",
                                "description": "Deprecated in favor of color bar's `title.side`.",
                                "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"
                        }
                    },
                    "coloraxis": {
                        "valType": "subplotid",
                        "role": "info",
                        "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                        "dflt": null,
                        "editType": "calc",
                        "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                    },
                    "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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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."
                },
                "categories": [
                    "cartesian",
                    "svg",
                    "2dMap",
                    "contour",
                    "showLegend"
                ],
                "animatable": false,
                "type": "contour",
                "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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"
                    },
                    "hovertext": {
                        "valType": "data_array",
                        "editType": "calc",
                        "description": "Same as `text`.",
                        "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-3.x-api-reference/blob/master/Formatting.md#d3_format"
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available.  Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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-3.x-api-reference/blob/master/Formatting.md#d3_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."
                    },
                    "zmid": {
                        "valType": "number",
                        "role": "info",
                        "dflt": null,
                        "editType": "calc",
                        "impliedEdits": {},
                        "description": "Sets the mid-point of the color domain by scaling `zmin` and/or `zmax` to be equidistant to this point. Value should have the same units as in `z`. Has no effect when `zauto` is `false`."
                    },
                    "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": "plot",
                        "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-3.x-api-reference/blob/master/Formatting.md#d3_format And for dates see: https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#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": {
                            "text": {
                                "valType": "string",
                                "role": "info",
                                "description": "Sets the title of the color bar. Note that before the existence of `title.text`, the title's contents used to be defined as the `title` attribute itself. This behavior has been deprecated.",
                                "editType": "colorbars"
                            },
                            "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": "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. Note that the title's font used to be set by the now deprecated `titlefont` attribute.",
                                "editType": "colorbars",
                                "role": "object"
                            },
                            "side": {
                                "valType": "enumerated",
                                "values": [
                                    "right",
                                    "top",
                                    "bottom"
                                ],
                                "role": "style",
                                "dflt": "top",
                                "description": "Determines the location of color bar's title with respect to the color bar. Note that the title's location used to be set by the now deprecated `titleside` attribute.",
                                "editType": "colorbars"
                            },
                            "editType": "colorbars",
                            "role": "object"
                        },
                        "_deprecated": {
                            "title": {
                                "valType": "string",
                                "role": "info",
                                "description": "Deprecated in favor of color bar's `title.text`. Note that value of color bar's `title` is no longer a simple *string* but a set of sub-attributes.",
                                "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": "Deprecated in favor of color bar's `title.font`.",
                                "editType": "colorbars"
                            },
                            "titleside": {
                                "valType": "enumerated",
                                "values": [
                                    "right",
                                    "top",
                                    "bottom"
                                ],
                                "role": "style",
                                "dflt": "top",
                                "description": "Deprecated in favor of color bar's `title.side`.",
                                "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"
                        }
                    },
                    "coloraxis": {
                        "valType": "subplotid",
                        "role": "info",
                        "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                        "dflt": null,
                        "editType": "calc",
                        "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                    },
                    "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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertextsrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertext .",
                        "editType": "none"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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."
                },
                "categories": [
                    "ternary",
                    "symbols",
                    "showLegend",
                    "scatter-like"
                ],
                "animatable": false,
                "type": "scatterternary",
                "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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."
                            },
                            "cmid": {
                                "valType": "number",
                                "role": "info",
                                "dflt": null,
                                "editType": "calc",
                                "impliedEdits": {},
                                "description": "Sets the mid-point of the color domain by scaling `marker.line.cmin` and/or `marker.line.cmax` to be equidistant to this point. Has an effect only if in `marker.line.color`is set to a numerical array. Value should have the same units as in `marker.line.color`. Has no effect when `marker.line.cauto` is `false`."
                            },
                            "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": "plot",
                                "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."
                            },
                            "coloraxis": {
                                "valType": "subplotid",
                                "role": "info",
                                "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                                "dflt": null,
                                "editType": "calc",
                                "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                            },
                            "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."
                        },
                        "cmid": {
                            "valType": "number",
                            "role": "info",
                            "dflt": null,
                            "editType": "calc",
                            "impliedEdits": {},
                            "description": "Sets the mid-point of the color domain by scaling `marker.cmin` and/or `marker.cmax` to be equidistant to this point. Has an effect only if in `marker.color`is set to a numerical array. Value should have the same units as in `marker.color`. Has no effect when `marker.cauto` is `false`."
                        },
                        "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": "plot",
                            "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-3.x-api-reference/blob/master/Formatting.md#d3_format And for dates see: https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#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": {
                                "text": {
                                    "valType": "string",
                                    "role": "info",
                                    "description": "Sets the title of the color bar. Note that before the existence of `title.text`, the title's contents used to be defined as the `title` attribute itself. This behavior has been deprecated.",
                                    "editType": "colorbars"
                                },
                                "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": "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. Note that the title's font used to be set by the now deprecated `titlefont` attribute.",
                                    "editType": "colorbars",
                                    "role": "object"
                                },
                                "side": {
                                    "valType": "enumerated",
                                    "values": [
                                        "right",
                                        "top",
                                        "bottom"
                                    ],
                                    "role": "style",
                                    "dflt": "top",
                                    "description": "Determines the location of color bar's title with respect to the color bar. Note that the title's location used to be set by the now deprecated `titleside` attribute.",
                                    "editType": "colorbars"
                                },
                                "editType": "colorbars",
                                "role": "object"
                            },
                            "_deprecated": {
                                "title": {
                                    "valType": "string",
                                    "role": "info",
                                    "description": "Deprecated in favor of color bar's `title.text`. Note that value of color bar's `title` is no longer a simple *string* but a set of sub-attributes.",
                                    "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": "Deprecated in favor of color bar's `title.font`.",
                                    "editType": "colorbars"
                                },
                                "titleside": {
                                    "valType": "enumerated",
                                    "values": [
                                        "right",
                                        "top",
                                        "bottom"
                                    ],
                                    "role": "style",
                                    "dflt": "top",
                                    "description": "Deprecated in favor of color bar's `title.side`.",
                                    "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"
                            }
                        },
                        "coloraxis": {
                            "valType": "subplotid",
                            "role": "info",
                            "regex": "/^coloraxis([2-9]|[1-9][0-9]+)?$/",
                            "dflt": null,
                            "editType": "calc",
                            "description": "Sets a reference to a shared color axis. References to these shared color axes are *coloraxis*, *coloraxis2*, *coloraxis3*, etc. Settings for these shared color axes are set in the layout, under `layout.coloraxis`, `layout.coloraxis2`, etc. Note that multiple color scales can be linked to the same color axis."
                        },
                        "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*."
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available.  Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },
                    "hovertemplatesrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  hovertemplate .",
                        "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."
                },
                "categories": [
                    "cartesian",
                    "svg",
                    "symbols",
                    "oriented",
                    "box-violin",
                    "showLegend",
                    "violinLayout",
                    "zoomScale"
                ],
                "animatable": false,
                "type": "violin",
                "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",
                        "description": "Assign an id to this trace, Use this to provide object constancy between traces during animations and transitions."
                    },
                    "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"
                    },
                    "meta": {
                        "valType": "any",
                        "arrayOk": true,
                        "role": "info",
                        "editType": "plot",
                        "description": "Assigns extra meta information associated with this trace that can be used in various text attributes. Attributes such as trace `name`, graph, axis and colorbar `title.text`, annotation `text` `rangeselector`, `updatemenues` and `sliders` `label` text all support `meta`. To access the trace `meta` values in an attribute in the same trace, simply use `%{meta[i]}` where `i` is the index or key of the `meta` item in question. To access trace `meta` in layout attributes, use `%{data[n[.meta[i]}` where `i` is the index or key of the `meta` and `n` is the trace index."
                    },
                    "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",
                            "editType": "none",
                            "description": "Sets the background color of the hover labels for this trace",
                            "arrayOk": true
                        },
                        "bordercolor": {
                            "valType": "color",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the border color of the hover labels for this trace.",
                            "arrayOk": true
                        },
                        "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"
                            }
                        },
                        "align": {
                            "valType": "enumerated",
                            "values": [
                                "left",
                                "right",
                                "auto"
                            ],
                            "dflt": "auto",
                            "role": "style",
                            "editType": "none",
                            "description": "Sets the horizontal alignment of the text content within hover label box. Has an effect only if the hover label text spans more two or more lines",
                            "arrayOk": true
                        },
                        "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.",
                            "arrayOk": true
                        },
                        "editType": "none",
                        "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"
                        },
                        "alignsrc": {
                            "valType": "string",
                            "role": "info",
                            "description": "Sets the source reference on plot.ly for  align .",
                            "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"
                    },
                    "uirevision": {
                        "valType": "any",
                        "role": "info",
                        "editType": "none",
                        "description": "Controls persistence of some user-driven changes to the trace: `constraintrange` in `parcoords` traces, as well as some `editable: true` modifications such as `name` and `colorbar.title`. Defaults to `layout.uirevision`. Note that other user-driven trace attribute changes are controlled by `layout` attributes: `trace.visible` is controlled by `layout.legend.uirevision`, `selectedpoints` is controlled by `layout.selectionrevision`, and `colorbar.(x|y)` (accessible with `config: {editable: true}`) is controlled by `layout.editrevision`. Trace changes are tracked by `uid`, which only falls back on trace index if no `uid` is provided. So if your app can add/remove traces before the end of the `data` array, such that the same trace has a different index, you can still preserve user-driven changes if you give each trace a `uid` that stays with it as it moves."
                    },
                    "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 violin 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. Note that the trace name is also used as a default value for attribute `scalegroup` (please see its description for details)."
                    },
                    "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. If a violin's `width` is undefined, `scalegroup` will default to the trace's name. In this case, violins with the same names will be linked together"
                    },
                    "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."
                    },
                    "width": {
                        "valType": "number",
                        "min": 0,
                        "role": "info",
                        "dflt": 0,
                        "editType": "calc",
                        "description": "Sets the width of the violin in data coordinates. If *0* (default value) the width is automatically selected based on the positions of other violin traces in the same subplot."
                    },
                    "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."
                    },
                    "hovertext": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "arrayOk": true,
                        "editType": "style",
                        "description": "Same as `text`."
                    },
                    "hovertemplate": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "none",
                        "description": "Template string used for rendering the information that appear on hover box. Note that this will override `hoverinfo`. Variables are inserted using %{variable}, for example \"y: %{y}\". Numbers are formatted using d3-format's syntax %{variable:d3-format}, for example \"Price: %{y:$.2f}\". https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format for details on the formatting syntax. The variables available in `hovertemplate` are the ones emitted as event data described at this link https://plot.ly/javascript/plotlyjs-events/#event-data. Additionally, every attributes that can be specified per-point (the ones that are `arrayOk: true`) are available.  Anything contained in tag `<extra>` is displayed in the secondary box, for example \"<extra>{fullData.name}</extra>\". To hide the secondary box completely, use an empty tag `<extra></extra>`.",
                        "arrayOk": true
                    },
                    "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": "calc",
                        "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*."
                    },
                    "offsetgroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set several traces linked to the same position axis or matching axes to the same offsetgroup where bars of the same position coordinate will line up."
                    },
                    "alignmentgroup": {
                        "valType": "string",
                        "role": "info",
                        "dflt": "",
                        "editType": "calc",
                        "description": "Set several traces linked to the same position axis or matching axes to the same alignmentgroup. This controls whether bars compute their positional range dependently or independently."
                    },
                    "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"
                    },
                    "metasrc": {
                        "valType": "string",
                        "role": "info",
                        "description": "Sets the source reference on plot.ly for  meta .",
                        "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"
                    },